利用cocos2dx 3.2开发消灭星星(五)update与触摸事件

原创 2014年09月10日 20:48:48

上一节我们一直在讲星星有两个位置,当前位置与目标位置。究竟是什么,有什么用。这一节为你解答。

所谓的当前位置,就是星星当前所处的位置,是可以改变的。

所谓的目标位置,就是星星要到达的位置,如果星星的当前位置不等于目标星星,星星的当前位置会不断地改变,直到移动到目标位置。

但是说起来简单,设置了这两个位置,到底怎么实现星星从当前位置移动到目标位置?


这里我们重新看之前被我们忽略的GameLayer中的update函数

void GameLayer::update(float delta){
	if(matrix){
		matrix->updateStar(delta);
	}
}

看到没有,GameLayer中的update其实就是调用内置星星矩阵matrix的updateStar方法。

之前我们介绍StarMatrix的时候可能还没有加入updateStar这个函数,没关系,在StarMatrix类中加入就好

void StarMatrix::updateStar(float delta){
	
	for(int i = 0;i < ROW_NUM;i++){
		for(int j = 0;j< COL_NUM;j++){
			if(stars[i][j]!=nullptr){
				stars[i][j]->updatePosition();
			}
		}
	}	
}


同样的StarMatrix的update方法也是调用比他更小的Star的updatePosition方法(其实就是在Layer层开启update,一层一层向下传递)

void Star::updatePosition(){
	if(desPosition.y != getPositionY()){
		setPositionY(getPositionY() - MOVE_SPEED);
		if(getPositionY() < desPosition.y){
			setPositionY(desPosition.y);
		}
	}
	if(desPosition.x != getPositionX()){
		setPositionX(getPositionX() - MOVE_SPEED);
		if(getPositionX() < desPosition.x){
			setPositionX(desPosition.x);
		}
	}
}

到这里还不清晰吗?updatePosition就会判断当前位置跟目标位置desPosition是否一样,从而逐渐改变Star的position,使之逐渐移动到desPosition

以后我们在对Star赋值的时候,只要Star的当前位置与desPosition位置不一样,Star就会自动向desPosition移动。


这里的update是从GameLayer一层一层地往下传到Star。


触摸事件也同样。

在GameLayer中的init函数中开启触摸事件。

EventListenerTouchOneByOne* listener = EventListenerTouchOneByOne::create();
	listener->onTouchBegan = CC_CALLBACK_2(GameLayer::onTouchBegan,this);

onTouchBegan函数:

bool GameLayer::onTouchBegan(Touch* touch,Event* event){
	Point p = touch->getLocationInView();
	p = Director::getInstance()->convertToGL(p);
	CCLOG("x=%f y=%f",p.x,p.y);
	if(matrix){
		matrix->onTouch(p);
	}
	return true;
}
看到没,这里把得到的触摸点传给了StarMatrix


但是StarMatrix可不会将触摸点又传给单个星星Star,应为单个星星是孤立的,传给它没用。。。

总之,我们的StarMatrix已经接受到触摸点了,具体怎么根据触摸点对自己本身的Star*二维数组进行操作,以后再说吧。



利用cocos2dx 3.2开发消灭星星(七)关于星星的算法

在前面,我们已经在GameLayer中利用随机数初始化了一个StarMatrix(星星矩阵:即所有的星星)...
  • hezijian22
  • hezijian22
  • 2014年10月01日 17:57
  • 2456

利用cocos2dx 3.2开发消灭星星(一)基本介绍

最近在大哥那边接到一个任务,用cocos2dx开发一款消灭星星。开始的时候想上网找个demo,但找到的是cocos2d-js版的。唯一找到一个也是基于cocos2dx2.2开发出来的,与现在的3.2版...
  • hezijian22
  • hezijian22
  • 2014年09月08日 17:13
  • 9599

利用cocos2dx 3.2开发消灭星星(四)游戏主场景

第二节说到在菜单场景MenuScene中加入一个菜单并且加入一个开始按钮切换到GameScene,下面我们来讲一下游戏的主界面GameScene和GameLayer 一、主场景GameScene ...
  • hezijian22
  • hezijian22
  • 2014年09月10日 20:36
  • 3249

cocos2d-x 仿 消灭星星(满天星) 源码+解析

cocos2d-x 仿 消灭星星(满天星) 源码+解析
  • hitwhylz
  • hitwhylz
  • 2014年10月15日 22:28
  • 3950

Cocos2d-x 3.4 之 消灭星星 > 第三篇(终) <

Cocos2d-x 3.4 之 消灭星星 > 第三篇(终) < > 粒子 > 音乐音效 > 漂浮文字 > combo特效 及 每关结束后星星的消除(小于等于10个的一个个消除,剩余的一齐消除) > 最...
  • lx417147512
  • lx417147512
  • 2015年06月08日 22:51
  • 2512

cocos2dx小游戏源码(消灭星星)

才开始了解cocos2dx,为了练手,开发了一下消灭星星这款游戏,游戏资源在网上下载的,游戏也是参考自android平台消灭星星这款游戏。现提供游戏源码,已在android平台测试过,有兴趣的同学可以...
  • XIAOZHI0999
  • XIAOZHI0999
  • 2014年03月28日 15:46
  • 8942

PopStar(消灭星星)游戏源代码下载、分析及跨平台移植---第一篇(界面)

背景:    来自星星的你电视剧很火,消灭星星游戏也很火,好像星星都很火,笔者就以星星为主题开始这篇博文。消除类的游戏挺受欢迎的,从2013年度app store最赚钱的游戏--粉碎糖果传奇,到总是...
  • touchsnow
  • touchsnow
  • 2014年03月03日 10:33
  • 20956

利用cocos2dx 3.2开发消灭星星(二)菜单(附素材)

1.游戏分辨率,这里由于背景素材是480
  • hezijian22
  • hezijian22
  • 2014年09月08日 17:46
  • 3470

PopStar(消灭星星)游戏源代码下载、分析及跨平台移植---第四篇(关卡)

背景:    本来打算把第三篇和第四篇合并都一起,但以前计划分开,就还是分来吧;一般的游戏涉及到关卡的话,一般都会建立一个数组来存放各种定义参数,消灭星星关卡比较容易,不需要建立数组,只有两个参数l...
  • touchsnow
  • touchsnow
  • 2014年03月30日 19:03
  • 7168

HTML5实现消灭星星

消灭星星游戏制作思路: (1)本游戏基于canvas画布实现。从界面看,消灭星星由10X10的星星方块组成,因而我们要定义一个二维数组来存储它。 (2)消灭星星的方块有红黄蓝绿紫五种,可以用一个随机数...
  • qq_25186987
  • qq_25186987
  • 2016年11月15日 20:50
  • 537
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:利用cocos2dx 3.2开发消灭星星(五)update与触摸事件
举报原因:
原因补充:

(最多只允许输入30个字)