ios swift学习笔记

swift从零开始--2048游戏动画

2020-05-11  本文已影响0人  迷夏湖

最近忙成狗,抽空继续研究学习下我的2048小游戏。之前已经将主界面及事件响应都加上了,今天先完成小方块的移动效果,让方块动起来。

1. 准备工作

之前项目里面已经实现了滑动屏幕随机添加方块,现在改成初始时随机生成2个方块,滑动屏幕时,按滑动方向移动方块,实现方块滑动的动画效果。在BoardPanel类的onViewDid方法里增加这个生成随机方块的函数即可。

        // 初始随机生成2个方块
        insertRandUnit()
        insertRandUnit()
2. 添加动画

发现之前只定义了一个gridArr不够,需要对之前逻辑进行修改。添加动画之前,需要再定义一个数组,存数字块的labe对象,相当于面板上铺两层label,一层作为背景,一层作为可移动的块。再定义一个indexArr, 存放数字块的坐标,如果位置上没有数字则值设置为-1.

    var digitArr = [UILabel]()  // 数字块
    // 存放数字快的位置index。下标对应0-15个grid,值对应digitArr的下标。
    var indexArr = [Int](repeating: -1, count: 16 )
       // 随机插入方块的方法也要跟着改一下
    func insertRandUnit() {
        let emptyIndexArr = getRandEmptyGrids()
        NSLog(String(emptyIndexArr!.count))
        if emptyIndexArr!.isEmpty {
            NSLog("全放满了")
            return
        }
        let rand = Int(arc4random_uniform(UInt32(emptyIndexArr!.count)))
        let index = emptyIndexArr![rand]
        let label = getEmptyGrid(index: index)
        self.addSubview(label)   //记得加到view中
        digitArr.append(label)
        indexArr[index] = digitArr.count - 1
        label.text = "2"
        label.backgroundColor = UIColor(red: 0.7, green: 0.8, blue: 1, alpha: 1)
    }
    // 获取空的grid的index数组
    func getRandEmptyGrids() -> [Int]! {
        var emptyIndexArr = [Int]()
        for i in 0 ..< DIM*DIM {
            if(indexArr[i] == -1) {
                emptyIndexArr.append(i)
            }
        }
        return emptyIndexArr
    }

添加动画,测试下label向上移动:

    // 移动动画
    func moveAnimate(fromIndex : Int, toIndex: Int) {
        let from = digitArr[indexArr[fromIndex]]
        let to = gridArr[toIndex]
       // 这里是添加动画的代码,是不是很简单?特效需要研究
        UIView.animate(withDuration: 0.5) {
            from.center.x = to.center.x
            from.center.y = to.center.y
        }
        // 交换移动的两个grid
        indexArr[toIndex] = indexArr[fromIndex]
        indexArr[fromIndex] = -1  //置空
    }
    // 测试向上移动一格
    func moveUpAnimate() {
        for i in 0 ..< DIM*DIM {
            let index = indexArr[i]
            if(index > 0 && i > 3) {
                // 向上i移动一格
                moveAnimate(fromIndex: i, toIndex: i-4)
                break;
            }
        }
    }
3. 下一步计划

现在方块已经按预期动起来了,接下来就是合并方块了,就可以真的装手机里去玩了,很期待。

往期文章

swift实现2048小游戏其它文章入口在下面,感兴趣的朋友可以进去看看,有问题可以给我留言哦,大家相互进步。
swift学习笔记

上一篇 下一篇

猜你喜欢

热点阅读