Cocos引擎《保卫萝卜》04实现简单的游戏原型文档格式.docx

上传人:b****1 文档编号:5926687 上传时间:2023-05-05 格式:DOCX 页数:18 大小:20.41KB
下载 相关 举报
Cocos引擎《保卫萝卜》04实现简单的游戏原型文档格式.docx_第1页
第1页 / 共18页
Cocos引擎《保卫萝卜》04实现简单的游戏原型文档格式.docx_第2页
第2页 / 共18页
Cocos引擎《保卫萝卜》04实现简单的游戏原型文档格式.docx_第3页
第3页 / 共18页
Cocos引擎《保卫萝卜》04实现简单的游戏原型文档格式.docx_第4页
第4页 / 共18页
Cocos引擎《保卫萝卜》04实现简单的游戏原型文档格式.docx_第5页
第5页 / 共18页
Cocos引擎《保卫萝卜》04实现简单的游戏原型文档格式.docx_第6页
第6页 / 共18页
Cocos引擎《保卫萝卜》04实现简单的游戏原型文档格式.docx_第7页
第7页 / 共18页
Cocos引擎《保卫萝卜》04实现简单的游戏原型文档格式.docx_第8页
第8页 / 共18页
Cocos引擎《保卫萝卜》04实现简单的游戏原型文档格式.docx_第9页
第9页 / 共18页
Cocos引擎《保卫萝卜》04实现简单的游戏原型文档格式.docx_第10页
第10页 / 共18页
Cocos引擎《保卫萝卜》04实现简单的游戏原型文档格式.docx_第11页
第11页 / 共18页
Cocos引擎《保卫萝卜》04实现简单的游戏原型文档格式.docx_第12页
第12页 / 共18页
Cocos引擎《保卫萝卜》04实现简单的游戏原型文档格式.docx_第13页
第13页 / 共18页
Cocos引擎《保卫萝卜》04实现简单的游戏原型文档格式.docx_第14页
第14页 / 共18页
Cocos引擎《保卫萝卜》04实现简单的游戏原型文档格式.docx_第15页
第15页 / 共18页
Cocos引擎《保卫萝卜》04实现简单的游戏原型文档格式.docx_第16页
第16页 / 共18页
Cocos引擎《保卫萝卜》04实现简单的游戏原型文档格式.docx_第17页
第17页 / 共18页
Cocos引擎《保卫萝卜》04实现简单的游戏原型文档格式.docx_第18页
第18页 / 共18页
亲,该文档总共18页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

Cocos引擎《保卫萝卜》04实现简单的游戏原型文档格式.docx

《Cocos引擎《保卫萝卜》04实现简单的游戏原型文档格式.docx》由会员分享,可在线阅读,更多相关《Cocos引擎《保卫萝卜》04实现简单的游戏原型文档格式.docx(18页珍藏版)》请在冰点文库上搜索。

Cocos引擎《保卫萝卜》04实现简单的游戏原型文档格式.docx

com.game.defendthegirl。

如果还不会创建工程请参照:

本篇原型需要实现内容:

1、在主场景中载入一张地图。

2、在地图终点放置一个女主角,在地图的起点放置一个色狼大叔。

3、让色狼大叔沿着地图指定的路线向女主角的位置靠近。

素材图片准备:

地图图片

女主角图片

色狼大叔图片

把这几张素材图片拷贝到文件夹Resources下面即可。

1、在主场景中载入一张地图

第一步:

用MicrosoftVisualStudio2012打开proj.win32工程,然后在src下新建MainScene.h、MainScene.cpp作为游戏的主场景(Scene不会建?

参考:

HelloGame项目解析)。

第二步:

在init()方法里载入地图图片level_bg_1.png,代码如下:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

bool 

MainScene:

:

init()

{

if 

( 

!

Layer:

init() 

return 

false;

}

Size 

visibleSize 

Director:

getInstance()->

getVisibleSize();

Vec2 

origin 

getVisibleOrigin();

//载入地图背景

auto 

sprite 

Sprite:

create("

level_bg_1.png"

);

sprite->

setPosition(Vec2(visibleSize.width/2 

origin.x, 

visibleSize.height/2 

origin.y));

this->

addChild(sprite, 

0);

true;

第三步:

打开AppDelegate.cpp文件,引入MainScene.h头文件,并且在applicationDidFinishLaunching方法中把autoscene=HelloWorld:

createScene();

改成autoscene=MainScene:

然后运行。

2、在地图终点放置一个女主角,在地图的起点放置一个色狼大叔

在init()方法里添加如下代码

……

//在地图起点处放置一个色狼

dsSprite 

dashu.png"

dsSprite->

setPosition(Vec2(40, 

390));

addChild(dsSprite, 

//在地图终点处放置一个女主角

nhSprite 

girl.png"

nhSprite->

setPosition(Vec2(920, 

480));

addChild(nhSprite, 

…...

然后运行就可以在画面上看到色狼大叔和女主角了

3、让色狼大叔沿着地图指定的路线向女主角的位置靠近

这个一个有点难度的任务,首先我们对这张地图的道路路径进行一下坐标分析:

如上图所示,以地图的右下顶点为坐标系原点,整个道路分成12个坐标点,女主角在1号坐标点,色狼大叔在12号坐标点。

现在色狼大叔将沿着图中黄色的线路从12点开始11点、10点、9点…直至到达1点,我的实现思路是这样,色狼从12点出发时告诉它目标点是11点,当色狼到达11点的时候继续告诉它下一个目标点是10点直到1点。

几个实现技术点:

1)对Sprite(色狼)进行setPosition的方式可以改变Sprite在图上的位置从而实现Sprite的移动

2)计算Sprite(色狼)位置到目标点的向量值,然后根据这个向量值和色狼移动速度计算Sprite在x,y方向上的距离偏移值,用这个偏移值调整Sprite的位置

判断Sprite(色狼)到达目标点(如:

11点),如下图所示通过Sprite坐标点和目标点之间的距离小于一定值的时就判定为到达目标点,需要设置新的下一个目标点。

有了这些实现思路,现在开始代码编写:

由上面是实现思路可知我们的基本实现是路径点,那么这里先新建一个路径点类对象,名称为:

Waypoint.h、Waypoint.cpp,继承自:

cocos2d:

CCNode。

Waypoint.h:

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

class 

Waypoint:

public 

CCNode

public:

Waypoint(void);

~Waypoint(void);

//初始化方法

static 

Waypoint* 

nodeWithTheLocation(cocos2d:

Point 

location);

initWithTheLocation(cocos2d:

//设置当前点的下一个路径点

void 

setNextWaypoint(Waypoint* 

waypoint);

//获取当前点的下一个路径点

getNextWaypoint();

//当前路径点位置

CC_SYNTHESIZE(cocos2d:

Point,_myPosition,MyPosition);

private:

//下一个路径点

_nextWaypoint;

};

Waypoint.cpp:

Waypoint(void)

_nextWaypoint=NULL;

~Waypoint(void)

location)

pRet=new 

Waypoint();

(pRet 

&

pRet->

initWithTheLocation(location))

autorelease();

pRet;

else

delete 

pRet=NULL;

NULL;

bRet=false;

do 

_myPosition=location;

setPosition(Point:

ZERO);

bRet=true;

while 

(0);

bRet;

waypoint)

_nextWaypoint=waypoint;

getNextWaypoint()

在MainScene.h里声明如下代码

//重写Layer的update方法

//我们主要在这个方法里实现色狼移动

virtual 

update(float 

delta);

CREATE_FUNC(MainScene);

//路径开始点

Waypoint 

*beginningWaypoint;

//路径目标点

*destinationWaypoint;

//色狼的移动速度

float 

walkingSpeed;

//色狼当前位置

myPosition;

//色狼大叔

Sprite* 

dsSprite;

//路径点集合

Vector<

Waypoint*>

wayPositions;

//判断2个点是否靠近

collisionWithCircle(cocos2d:

circlePoint,float 

radius,cocos2d:

circlePointTwo, 

radiusTwo);

这里代码,也对之前代码进行了修改重构,比如把之前在init()方法里声明的dsSprite(色狼)改到了这里变成了一个全局变量,因为在后续的update方法中需要对它进行操作。

在MainScene.cpp的init()方法中创建路径点集合编写如下代码

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

//获得色狼大叔的高

dsh=dsSprite->

getTextureRect().size.height;

//初始化地图路径点集合

wayPositions 

();

//添加地图1号路径点到集合中

*waypoint1=Waypoint:

nodeWithTheLocation(Point(920, 

435+dsh/2.0f));

if(this->

wayPositions.size()>

0)

//设置下一个节点

waypoint1->

setNextWaypoint(this->

wayPositions.back());

wayPositions.pushBack(waypoint1);

//添加地图2号路径点到集合中

*waypoint2=Waypoint:

nodeWithTheLocation(Point(762, 

waypoint2->

wayPositions.pushBack(waypoint2);

//添加地图3号路径点到集合中

*waypoint3=Waypoint:

360+dsh/2.0f));

waypoint3->

wayPositions.pushBack(waypoint3);

//添加地图4号路径点到集合中

*waypoint4=Waypoint:

nodeWithTheLocation(Point(685, 

waypoint4->

wayPositions.pushBack(waypoint4);

//添加地图5号路径点到集合中

*waypoint5=Waypoint:

116+dsh/2.0f));

waypoint5->

wayPositions.pushBack(waypoint5);

//添加地图6号路径点到集合中

*waypoint6=Waypoint:

nodeWithTheLocation(Point(520, 

waypoint6->

wayPositions.pushBack(waypoint6);

//添加地图7号路径点到集合中

*waypoint7=Waypoint:

180+dsh/2.0f));

waypoint7->

wayPositions.pushBack(waypoint7);

//添加地图8号路径点到集合中

*waypoint8=Waypoint:

nodeWithTheLocation(Point(285, 

waypoint8->

wayPositions.pushBack(waypoint8);

//添加地图9号路径点到集合中

*waypoint9=Waypoint:

268+dsh/2.0f));

waypoint9->

wayPositions.pushBack(waypoint9);

//添加地图10号路径点到集合中

*waypoint10=Waypoint:

nodeWithTheLocation(Point(204, 

waypoint10->

wayPositions.pushBack(waypoint10);

//添加地图11号路径点到集合中

*waypoint11=Waypoint:

350+dsh/2.0f));

waypoint11->

wayPositions.pushBack(waypoint11);

//添加地图12号路径点到集合中

*waypoint12=Waypoint:

nodeWithTheLocation(Point(50, 

waypoint12->

wayPositions.pushBack(waypoint12);

第四步:

在MainScene.cpp的init()方法中初始化几个变量以及精灵的初始位置编写如下代码

//获取集合中的最后一个点,12号点

*waypoint0=wayPositions.back();

//设置运动的开始点

beginningWaypoint=waypoint0;

//设置运动的目标点为12号点的下一个点,11号点

destinationWaypoint=waypoint0->

//设置色狼当前位置值

myPosition=waypoint0->

getMyPosition();

//设置色狼在地图的初始位置

setPosition(myPosition);

//设置女主角在地图的初始位置,为集合中的1号点

setPosition(wayPositions.front()->

getMyPosition());

//设置移动速度

walkingSpeed=0.2f;

//定时器

scheduleUpdate();

第五步:

在MainScene.cpp中

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > IT计算机 > 电脑基础知识

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2