(NO.00003)iOS游戏简单的机器人投射游戏成形记(七)

因为到目前为止我都是在iOS模拟器中测试,但即便如此,也觉得按住手臂旋转时,手臂转动起来比较费劲,很难停止在玩家期望的位置上.因为手臂完全通过物理引擎的计算来移动,它有自身的惯性影响,所以很难控制.

如果这就是我们想要的效果:增加瞄准的控制难度,那么恭喜你,成功了.

但在这里我们能不能将手臂的控制感做的更精确,更舒服一些呢?

让我们换一种思路,不用物理引擎来移动物体,而通过代码来移动,这样可以完全忽略物理引擎的多余”附加效果”,做到收放自如.

为了不改变现有的机器人对象,我们创建一个新的符合该行为的新机器人对象.该机器人的类还是Robot,只不过手臂的类变成ArmStaic.

在SpriteBuilder的Sprites文件夹中新建RobotStatic.ccb文件,类型为Node.和Robot.ccb处理过程类似.分别拖动Body和Arm对象到其根节点.

区别在于以下几点:

1.arm自定义类为ArmStatic而不是Arm
2.arm是静态物理对象而不是动态对象
3.不需要添加物理关节链接手臂

SpriteBuilder的操作基本完成了,下一篇我们将回到Xcode去完成对应的控制代码,see you ;)

时间: 2024-10-27 12:01:58

(NO.00003)iOS游戏简单的机器人投射游戏成形记(七)的相关文章

(NO.00003)iOS游戏简单的机器人投射游戏成形记(一)

这是一个简单的机器人投射游戏,主要来熟悉物理引擎的一些东西.你可以把它认为是机器人投篮;尽管投出的是抛物线,但不是篮球而是子弹,速度也较快. 游戏玩法是玩家选择机器人,移动机器人手臂瞄准篮框,然后发射子弹.如果子弹掉入篮框则得分.子弹耗完或时间耗完则游戏结束. 游戏中主要玩法的变化如下: 1.可以通过修改过关条件,比如限制子弹数量,限制剩余时间,要求必须达到一定分数等增加或降低难度. 2.可以通过Level场景的布局以及篮框的移动路线来增加难度,别忘了场景中机器人的位置也是可以变化的,而且谁说场

(NO.00003)iOS游戏简单的机器人投射游戏成形记(九)

现在按住手臂可以非常自然和舒服的旋转了,丝般顺滑:移动停止,旋转立即停止,没有什么惯性影响了. 以上一共介绍了2中旋转方式,到底采用哪种方式呢?其实看实际游戏的需求和个人的喜好了.本猫在Level中添加了2个机器人,每种类型一个,想用哪个都可以. 机器人手臂旋转基本完成,下面是发射子弹的干活了. 回到SpriteBuilder中,在Sprites文件夹中新建Bullet.ccb文件,类型为Sprite. 添加以前绘制的素材,打开其物理对象,类似如下图: 你可以把子弹物理边界设置的严丝合缝很精细,

(NO.00003)iOS游戏简单的机器人投射游戏成形记(十八)

在游戏中制作手臂瞄准线,也就是所谓的辅助延长线.玩台球游戏的童鞋应该可以了解. 按道理来说,延长线是一个物理实体,遇到物理刚体应该会发生反弹行为,这个符合实际游戏逻辑. 但是这里为了简单,只是做一条"傻傻地"线而已,上面憧憬中的反弹延长线有机会以后游戏中再来实现. 用Ai绘制一条长度适合的虚线: 打开SpriteBuilder,将其拖入arm中,使其成为arm的子节点,这样,它自动会跟着父节点旋转,不需要写额外的代码了. 设置其代码连结名称为_dash,默认为不可见. 回到Xcode,

(NO.00003)iOS游戏简单的机器人投射游戏成形记(五)

上一篇我们建立了机器人物理对象,下面我们来看看对应的逻辑代码. 进入Xcode,新建Robot和Arm类,分别继承于CCNode和CCSprite类.代码全部留空,后面再实现. 我们再看一下这个机器人要如何与玩家交互.当玩家触碰到机器人手臂并且移动时,以关节为中心旋转手臂.因为前面在SpriteBuilder中限制了关节转动的范围,所以不用担心关节旋转到"奇怪"的角度上. 首先在Arm.m的初始化方法中打开用户交互: self.userInteractionEnabled = YES;

(NO.00003)iOS游戏简单的机器人投射游戏成形记(二)

打开Ai按需求依次绘制机器人身体,手臂和篮框: 因为是实验性质的游戏所以没必要在这上面花太多功夫,画出意思即可.虽然是2D游戏,但实际游戏中可以表现出伪3D的图形效果;尽管本猫这次画的游戏元素都是满满的2D效果 ;) 还要注意的是各个游戏元素大小的比例需要适中,因为机器人身体和手臂需要在游戏中组合,且手臂需要单独转动,所以分开绘制. 我们还需要子弹元素,就拿NO.00002游戏中的子弹素材吧: SpriteBuilder新建项目,命名为ShootBall. 将之前绘制的游戏素材拖入新建的Imag

(NO.00003)iOS游戏简单的机器人投射游戏成形记(十三)

好了,现在在iOS模拟器中编译运行App,一切貌似都很好. 且慢,我们还没有到真机上调试呢?按说在编写App'时,无论如何应该尽快尽早在真机上调试.否则可能会碰到意想不到的问题,这次就是如此. 在真机上运行该App'时,发现一个使可玩性严重打折扣的问题:机器人太小,玩家手指在按住机器人手臂时,手指会将整个机器人完全挡住,无法看到手臂究竟旋转到神马位置.原来在模拟器上没有这个问题,因为那时是用鼠标指针模拟手指来旋转的. 这个问题必须修正,否则严重影响可玩性! 我们可以增加一种移动手臂的方式:按住屏

(NO.00003)iOS游戏简单的机器人投射游戏成形记(三)

接下来我们建立机器人对象. 在Sprites文件夹中新建Robot.ccb文件,类型为Node. 打开SpriteBuilder的Tileless View将机器人身体和手臂拖入根节点,调整好相对的位置: 在Timeline中将身体命名为body,手臂命名为arm.这仅仅是便于在SpriteBuilder中识别对象,没有别的作用. 打开body的物理对象,设置为静态类型.同时打开arm物理对象,设置为动态对象.和篮框类似,需要分别绘制出合适的物理边界: 因为手臂是动态对象,所以此时运行游戏手臂会

(NO.00003)iOS游戏简单的机器人投射游戏成形记(十六)

回到MainScene.m中添加selectRobot方法: -(void)selectRobot:(Robot *)robot{ LevelRestrict *lr = [LevelRestrict sharedInstance]; for (Robot *r in lr.robotsInLevel) { if (r != robot) { r.isSelected = NO; } } } 代码逻辑已经说过了,将LevelRestrict中机器人数组修改为正确的状态:反选其他所有的机器人. 添

(NO.00003)iOS游戏简单的机器人投射游戏成形记(十七)

现在玩家选择机器人后,可以在屏幕上或手臂上点击来移动robot's arm了. 但是玩家选择一个机器人后没有视觉效果来表明哪个机器人被选中.玩家做了一个操作后没有视觉反馈会惹恼强迫症用户滴 ;) 这篇中我们来添加选中后的视觉效果. 打开SpriteBuilder,分别在Robot.ccb和RobotStatic.ccb中做同样的操作: 在更CCNode中添加一个粒子效果对象,位置放在机器正中,默认状态为不可见: 设置代码连结为_shine. 回到Xcode中,在Robot.h接口中添加如下新属性