Cocos2D教程:使用SpriteBuilder和Cocos2D 3.x开发横版动作游戏——Part 1

本教程介绍了如何使用Cocos2D 3.x和SpriteBuilder开发横版动作游戏。内容涵盖游戏工程创建、TiledMap瓦片地图加载、角色状态机和敌人AI的实现、虚拟摇杆的设计。文章详细阐述了从新建项目到游戏主场景搭建的过程,并展示了如何加载瓦片地图和创建英雄角色。
摘要由CSDN通过智能技术生成

本文是对教程How To Make A Side-Scrolling Beat Em Up Game Like Scott Pilgrim with Cocos2D – Part 1的部分翻译,加上个人理解而成,最重要的是将文中所有代码转换为Cocos2D 3.x版本。众所周知,3.x与2.x的区别非常之大,在触摸机制、渲染机制等方面都与之前版本有了本质的区别。这里将本人摸索的结果加上,供大家参考。

通过本系列教程你可以学到:

1、Cocos2D 3.x版本的工程创建以及编写

2、TiledMap瓦片地图的简单使用

3、角色状态机的使用

4、敌人AI与简单的决策树

5、碰撞与攻击检测

6、虚拟摇杆的封装与使用

…………

现在,一起来学习吧。

游戏开始:新建游戏工程

Cocos2D 3.x的官方推荐新建项目的方法是利用SpriteBuilder,并且再建完项目之后是否继续使用SpriteBuilder就取决于你的游戏了,所以不用担心你对SpriteBuilder一无所知,因为该游戏中我们不会用到SpriteBuilder。

打开SpriteBuilder,点击左上角File->new->Project


给项目起一个名字:PompaDroid,按照作者的意思,就是海扁机器人(Android)喽偷笑,这里语言选择Objective-C

工程建好之后,点击左上角发布按钮


然后点击file->open project in Xcode,这时SpriteBuilder的任务就完成了,在打开的Xcode中编译,运行,你就可以看到上面的SpriteBuilder的画面了,这就是3.x版本的HelloWorld界面。


游戏主场景

该游戏中只需要一个场景,因为我们去掉了所谓的开始界面、结束界面等,也没有加入什么装备界面或者是任务界面。将原本项目中自带的MainScene删掉,我们不需要这个类。

现在,我们先把框架搭好。按下command+N,新建一些Objective-C类,分别是:

GameScene——我们的游戏主场景,主要功能是将实现游戏功能的两个Layer添加进来。

GameLayer——核心类之一,处理触摸(攻击),加载瓦片地图,实现游戏逻辑。

HUDLayer——放置虚拟摇杆的Layer,与GameLayer分开的原因后面会讲到。


建好以后,你的工程应该会类似这样:


当然了,如果你现在想编译运行,你还会发现你的项目在一开始就crash了,因为我们刚才已经把项目的入口删掉了,现在我们要换成我们自己的入口。

使用SpriteBuilder创建的项目与之前版本有很大的不同,尤其是在AppDelegate中,自习阅读一下的话,会发现这里干的事情是加载SpriteBuilder中的一些配置。我们之前熟悉的代码被提交到CCAppDelegate中了。

打开Soucre->Platforms->iOS->AppDelegate.m,找到最下面的startScene方法,将其替换为

<span style="font-size:18px;">return [GameScene node];</span>
不要忘了引入头文件

<span style="font-size:18px;">#import "GameScene.h"</span>

这时编译运行,你就会看到——一片漆黑了。。也对,我们还没有添加任何代码呢。

注意在Cocos2D 3.x中,如果你将GameLayer和HUDLayer继承与CCLayer,你会发现Xcode无法找到这个类,因为3.x舍弃了CCLayer,layer已经成了概念上的一个词语了。因此我们只需要简单的继承自CCNode即可。至于触摸机制,3.x使用全新的触摸机制,CCNode继承自CCResponder,由该类处理交互。换句话说,任何CCNode的类都可以相应触摸事件了,这点接下来会详述。

依然是我们的游戏场景类GameScene中,我们添加如下代码:

<span style="font-size:18px;">//导入头文件
#import "GameLayer.h"
#import "HUDLayer.h"
//添加属性声明
@property (strong, nonatomic) GameLayer *gameLayer;
@property (strong, nonatomic) HUDLayer *hudLayer;</span>
在.m中添加初始化方法init
<span style="font-size:18px;">- (id)init {
    self = [super init];
    if (self) {
        self.gameLayer = [GameLayer node];
        self.gameLayer.contentSize = CGSizeMake(self.gameLayer.tileMap.tileSize.width * self.gameLayer.tileMap.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值