Cocos2d开发系列(三)

本文是Cocos2d开发系列的第三部分,详细介绍了如何在游戏场景中响应加速器事件,实现重力感应控制。通过创建游戏DoodleDrop,设置主场景,添加玩家角色,处理加速器事件,优化移动控制,添加障碍物,进行碰撞检测,以及集成音频。此外,还讨论了游戏在iPad上的迁移和适配。
摘要由CSDN通过智能技术生成

分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow

也欢迎大家转载本篇文章。分享知识,造福人民,实现我们中华民族伟大复兴!

               

正好不知道接下来要怎么写的时候,发现了一本好书:《Learn IPhone and iPad Cocos2d Game Delevopment》。于是直接翻译了第4章的例子。如果你看过这部分内容,可以直接跳过不看了。本章讲如何响应加速器事件。

 

一、游戏介绍

这个例子是一个叫做DoodleDrop的游戏,是一个重力感应类游戏。玩家操纵角色来躲避从空中坠落的障碍物。游戏界面如下:

 

二、设置主场景

1、新建Cocos2dApplication,工程名DoodleDrop。

2、游戏主场景。选File-> new file,选择User Templates -> Cocos2d.0.99.x -> CCNode.class。SubclassOf选择CCLayer。文件名选GameScene。

3、在头文件中声明静态方法+(id) scene;

4、.m文件

#import"GameScene.h"

@implementationGameScene

+(id) scene {

CCScene *scene = [CCScene node];

CCLayer* layer = [GameScene node];

[scene addChild:layer];

return scene;

}

-(id) init {

if ((self = [super init])) {

CCLOG(@"%@: %@",NSStringFromSelector(_cmd), self); returnself;

}

-(void)dealloc {

// never forget to call [super dealloc] [superdealloc];

CCLOG(@"%@: %@",NSStringFromSelector(_cmd), self);

[super dealloc];

}

@end

5、删除HelloWorldScene.h和HelloWorldScene.m文件。

6、修改DoodleDropAppDelegate.m,将其中的主场景启动代码修改为GameScene:

[[CCDirectorsharedDirector] runWithScene: [GameScene scene]];

三、游戏角色

1、把玩家角色图片alien.png添加到工程。添加时,选中“Copy items”,同时勾选“add to targets”中的“DoodleDrop”选项。

2、在游戏主场景(GameScene.h)增加变量声明:

CCSprite*player;

3、在游戏主场景(GameScene.m)的init方法中加入下列代码:

self.isAccelerometerEnabled= YES;

player =[CCSprite spriteWithFile:@"alien.png"];

[selfaddChild:player z:0 tag:1];

CGSizescreenSize = [[CCDirector sharedDirector] winSize];

 float imageHeight = [playertexture].contentSize.height;

player.position= CGPointMake(screenSize.width / 2, imageHeight / 2);

这样,玩家角色就被放到屏幕底部正中的位置上。注意,player变量未retain。因为addChild会自动retain。

[playertexture].contentSize.height返回的是渲染图的content size。渲染对象(玩家角色图片alient.png)有两个尺寸:contentsize和texture size。前者是图片的实际尺寸,后者是渲染尺寸——iPhone规定渲染尺寸只能是2的n次方。比如图片实际尺寸100*100,那么渲染尺寸则是128*128,因为最接近100的2的n次方为128。

四、使用加速器

1、为了响应加速器事件,你必须在init方法中加上:

self.isAccelerometerEnabled= YES;

同时实现accelerometer方法:

-(void)accelerometer:(UIAccelerometer *)accelerometer didAccelerate:(UIAcceleration*)acceleration{

CGPoint pos = player.position;

 pos.x += acceleration.x * 10;

player.position = pos;

}

java和c不同。你不能对player.position.x进行赋值。这种赋值在

c语言中是可以的,但oc中不行。因为player.position实际上是调用[playerposition],这个方法返回一个临时的CGPoint变量。当你想对这个临时的CGPoint的x进行赋值后,这个变量会被被抛弃,所以你的赋值没有任何作用。所以你需要用一个新的CGPoint变量,修改其x值,然后再把这个CGPoint赋值给player.position(即调用[playersetPosition:])。如果你是来自java和c++的程序员,在oc中需要留心这个“不幸的”问题并尽可能的修改编程习惯。

2、运行测试

模拟器不支持重力感应,请在物理设备上运行代码。

五、玩家控制

现住发现用加速器控制有些不灵?反应迟钝,移动也不流畅?为此,我们需要增加一些代码。

首先需要增加变量声明: 

CGPointplayerVelocity;

为了便于今后的扩展(假设有一天我们会想上下移动角色),这是一个CGPoint类型,而不是一个float。

然后修改加速器方法:

-(void)accelerometer:(UIAccelerometer *)accelerometer

didAccelerate:(UIAcceleration*)acceleration

{

// 减速度系数(值越小=转向越快)

float deceleration = 0.4f;

// 加速度系数 (值越大 = 越敏感)

float sensitivity = 6.0f;

// 最大速度

float maxVelocity = 100;

// 根据加速度计算当前速度

 playerVelocity.x = playerVelocity.x * deceleration + acceleration.x* sensitivity;

// 限制最大速度为 ±maxVelocity之间

 directions if (playerVelocity.x > maxVelocity) {

playerVelocity.x= maxVelocity;

} else if (playerVelocity.x < - maxVelocity){

playerVelocity.x= - maxVelocity;

}

}

现在,玩家速度由一个一次线性方程决定:

V= V * β + V * ε

其中,

V 为终速

V 为初速

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
(译)cocos2d里面如何用texture picker和像素格式来优化spritesheet.pdf (译)在cocos2d里如何制作各种按钮.pdf (译)如何使用cocos2d制作基于tilemap的游戏教程 第一部分.pdf (译)如何在cocos2d里面使用动画和spritesheet.pdf (译)如何用cocos2d制作iphone游戏:旋转炮塔.pdf (译)如何用cocos2d制作iphone游戏:更猛的怪物和更多得管卡.pdf (译)如何使用cocos2d制作一个Slide Image Game:第一部分.pdf (译)如何使用cocos2d来制作一个塔防游戏:第一部分.pdf cocos2d 2.0 添加遮罩.pdf iOS Code Signing解惑.pdf iPhone上面的现实增强(Augmented Reality)入门教程.pdf OpenGL ES2.0 – Iphone开发指引.pdf OpenGLES2.0 Iphone开发指引:第二部分,纹理贴图.pdf 使用cocos2d和box2d制作滚动背景.pdf 加入敌人和战斗:如果使用cocos2d制作基于tiled地图的游戏:第部分.pdf 在cocos2d里面如何使用物理引擎box2d:弹球.pdf 在cocos2d里面如何拖拽精灵.pdf 如何使用box2d来做碰撞检测(且仅用来做碰撞检测).pdf 如何使用CCRenderTexture来创建动态纹理.pdf 如何使用cocos2d1.0来给sprite添加Mask(遮罩).pdf 如何使用cocos2d制作一个塔防游戏:引子.pdf 如何使用cocos2d制作一个太空射击游戏.pdf 如何使用cocos2d制作一个打地鼠的游戏:(第二部分。完).pdf 如何使用cocos2d和box2d来制作一个Breakout游戏:第一部分.pdf 如何使用cocos2d和box2d来制作一个Breakout游戏:第二部分(完).pdf 如何使用cocos2d来制作一个打地鼠的游戏:第一部分.pdf 如何使用GameCenter制作一个简单的多人游戏教程:第一部分.pdf 如何使用GameCenter制作一个简单的多人游戏教程:第二部分.pdf 如何使用NSCoding和NSFileManager来保存你的应用程序数据.pdf 如何制作一个类似tiny wings的游戏:第一部分.pdf 如何制作一个类似tiny wings的游戏:第二部分(完).pdf 如何升级你的cocos2d版本.pdf 如何学好Iphone开发.pdf 如何查找资料.pdf 碰撞检测和收集物品:如何使用cocos2d制作基于tiled地图的游戏:第二部分.pdf (译)cocos2d精灵教程:第一部分.pdf (译)cocos2d精灵教程:第部分.pdf (译)cocos2d精灵教程:第二部分.pdf (译)cocos2d菜单教程:第一部分.pdf (译)cocos2d菜单教程:第部分(完).pdf (译)cocos2d菜单教程:第二部分.pdf (译)使用cocos2d和box2d来制作一个platformer游戏.pdf (译)如何使用cocos2d制作一个塔防游戏:第部分.pdf (译)如何使用cocos2d制作一个塔防游戏:第二部分.pdf (译)如何使用cocos2d制作一个塔防游戏:第四部分(完).pdf (译)如何使用cocos2d制作一个滑动图片游戏教程:第二部分(完).pdf (译)如何用cocos2d制作一款简单的iphone游戏(第一部分).pdf
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值