美文网首页
一个小游戏

一个小游戏

作者: 哆啦_ | 来源:发表于2018-05-28 22:54 被阅读72次

    前几天看群里一个小伙伴写了个水果机的小demo,闲来无事周末学习了下,并做了下优化

    效果图

    效果图

    UI实现

    实现方面并不难,第一部分是UI布局,可能比较麻烦的就是每个按钮位置的计算,计算按钮位置的代码

        NSUInteger colNum = _column;
        CGFloat w = CGRectGetWidth(self.bounds) / colNum;
        for (NSUInteger i = 0; i < _items.count; i++) {
            NSInteger row = i / colNum;
            NSInteger col = i % colNum;
            UIButton *lastItem = _items[i];
            if (i < colNum) {// 第一行
                row = 0;
                col = i % colNum;
            }
            else if (i < (2 * colNum - 1)) {
                //  最后一列
                col = colNum - 1;
                row =  i - (_column - 1);
            }
            else if (i < (3 * colNum - 2)) {
                // 最后一行
                row = colNum - 1;
                col = 3 * (colNum - 1) - i;
            }
            else {
                col = 0;
                row = _items.count - i;
            }
            
            CGFloat x = col * w;
            CGFloat y = row * w;
            
            lastItem.frame = CGRectMake(x, y, w, w);
        }
    

    这里是把水果机当成一个正方形来处理了,当然也可以做成长方形的样子

    动画实现

    动画这里我是使用GCD开辟了一个子线程,通过让该线程sleep一小段时间后切换每个按钮的状态来实现。

    动画的速度是以控制每次sleep的时间长短来实现的,主要代码:

    - (void)updatePerSleepTime
    {
        if (_willStop) {
            // 减速
            _perSleepTime += 0.01;
            
            if (_perSleepTime > _maxPerSleepTime) {
                _perSleepTime = _maxPerSleepTime;
            }
        }
        else {
            if (_slowLoop <= _items.count) {
                _slowLoop++;
                return;
            }
            // 加速
            if (_slowLoop > _items.count) {
                _perSleepTime -= 0.03;
            }
            if (_perSleepTime < _minPerSleepTime) {
                _perSleepTime = _minPerSleepTime;
            }
        }
    }
    

    感兴趣的可以在Github上看下源代码

    P.S
    不知道啥时候简书的代码样式居然改成了黑色的,哎

    相关文章

      网友评论

          本文标题:一个小游戏

          本文链接:https://www.haomeiwen.com/subject/bhggjftx.html