(NO.00005)iOS实现炸弹人游戏(五):游戏数据的初始化(二)

简介:

大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处.
如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;)


我们现在来依次看一下上篇中提到的各个方法,首先介绍的是updateStateLabel方法:

#pragma mark MainScene游戏相关辅助方法

//更新主角状态标签,格式为:神速 无敌 爆裂 穿墙 穿弹 遥控
-(void)updateStateLabel{
    NSString *state = [NSString stringWithFormat:@"%@%@%@%@%@%@",
                       _isPlayerSpeedUp ? @"神速":@"    ",
                       _player.isInvincible ? @"无敌":@"    ",
                       !_isFearBomb ? @"爆裂":@"    ",
                       _player.canAcrossBrick ? @"穿墙":@"    ",
                       _player.canAcrossBomb ? @"穿弹":@"    ",
                       _isManualExplode ? @"遥控":@"    "];
    [_hudLayer updateStateLabel:state];
}

代码很好理解,就是根据当前主角的状态创建状态字符串然后显示在标签中,当然更可取的方法是使用图标来显示,这个可以留作以后扩展.

接下来看一下initNoWallTiles方法,该方法的作用是遍历所有非墙的瓦块坐标,为后面的方法调用做准备,起到一个缓存数据换速度的目的:

//初始化不是墙的所有瓦块坐标,还要排除(0,0),(0,1),(1,0)三个瓦块.
-(void)initNoWallTiles{
    CGPoint badTilePos1 = ccp(0, 0);
    CGPoint badTilePos2 = ccp(0, 1);
    CGPoint badTilePos3 = ccp(1, 0);

    for (int x = 0; x < _tileMap.mapSize.width; x++) {
        for (int y = 0; y < _tileMap.mapSize.height; y++) {
            CGPoint tilePos = ccp(x, y);
            if (CGPointEqualToPoint(tilePos, badTilePos1) ||
                CGPointEqualToPoint(tilePos, badTilePos2) ||
                CGPointEqualToPoint(tilePos, badTilePos3)) {
                continue;
            }else if (![self isWallAtTileCoord:tilePos]) {
                [_notWallTiles addObject:[NSValue valueWithCGPoint:tilePos]];
            }
        }
    }
    NSAssert(_notWallTiles.count == 249, @"_notWallTiles must equ 249");
}

代码中依次遍历了所有瓦块,将非墙瓦块的坐标加入到_notWallTiles数组中,这样后面的随机生成地图方法里我们可以很方便的使用这些数据了.注意其中剔除了3个坐标,分别为:

(0,0) , (0,1) 和 (1,0)

因为游戏主角炸弹人需要在(0,0)处产生,所以(0,1)和(1,0)自然不能放置砖块,否则主角自身就会”死路一条”,最后用一个断言来检查非墙瓦块的个数是否为249,这个是事先手动计算好的,总共为30x10=300个瓦块,减去6*8=48个不可摧毁墙体,再减去3个上述坐标,最后剩余249个瓦块可以操作.

相关文章
|
10月前
|
开发框架 前端开发 Android开发
Flutter 与原生模块(Android 和 iOS)之间的通信机制,包括方法调用、事件传递等,分析了通信的必要性、主要方式、数据传递、性能优化及错误处理,并通过实际案例展示了其应用效果,展望了未来的发展趋势
本文深入探讨了 Flutter 与原生模块(Android 和 iOS)之间的通信机制,包括方法调用、事件传递等,分析了通信的必要性、主要方式、数据传递、性能优化及错误处理,并通过实际案例展示了其应用效果,展望了未来的发展趋势。这对于实现高效的跨平台移动应用开发具有重要指导意义。
976 4
|
JSON JavaScript 安全
iOS应用程序数据保护:如何保护iOS应用程序中的图片、资源和敏感数据
iOS应用程序数据保护:如何保护iOS应用程序中的图片、资源和敏感数据
140 1
|
存储 iOS开发 开发者
使用克魔助手进行iOS数据抓包和HTTP抓包的方法详解
使用克魔助手进行iOS数据抓包和HTTP抓包的方法详解
288 0
|
iOS开发 开发者
iOS平台RTMP|RTSP播放器如何实时回调YUV数据
我们在做RTMP、RTSP播放器的时候,有开发者需要自己处理拉取到的YUV数据,做二次分析之用,为此,我们做了以下的设计:InitPlayer之后,再调用SmartPlayerStart()接口之前,设置yuv数据回调即可。
186 6
|
移动开发 小程序 API
uniapp通过蓝牙传输数据 (ios)
uniapp通过蓝牙传输数据 (ios)
694 1
|
Java iOS开发
iOS的数据序列化(又称持久化)的两类使用方式
iOS的数据序列化(又称持久化)的两类使用方式
146 0
|
Web App开发 小程序 Android开发
mPaaS小程序问题之接入iOS后阿里百川初始化报错如何解决
mPaaS小程序是阿里巴巴移动平台服务(mPaaS)推出的一种轻量级应用解决方案,旨在帮助开发者快速构建跨平台的小程序应用;本合集将聚焦mPaaS小程序的开发流程、技术架构和最佳实践,以及如何解决开发中遇到的问题,从而助力开发者高效打造和维护小程序应用。
240 1
|
JSON JavaScript 安全
iOS 应用程序数据保护:如何保护 iOS 应用程序中的图片、资源和敏感数据
iOS 应用程序数据保护:如何保护 iOS 应用程序中的图片、资源和敏感数据