Cocos2d-x 3.2 大富翁游戏项目开发-第十部分实现人物轮流行走

来源:未知 责任编辑:责任编辑 发表时间:2015-03-01 01:34 点击:

现在只能让我方角色行走,对手并没有行动,如何实现轮流行走呢?

有2种方法,一种是采用刷帧控制器在update进行,另一种采用消息机制的形式实现,我们尽量避免使用刷帧控制器。就采用第二种消息机制吧

 

我们在GameBaseScene中定义变量players_vector [Player*] 来存放所有的角色;

在添加新对象时,给该对象设置属性_isMyTurn为true

这样所有对象添加完毕后players_vector [Player*]所有的isMyTurn都为true,表示可以调用go方法,进行行走。

 

思路如下:

 

 

在go按钮点击之后,我方角色先走,这时就不应该再响应点击事件了,我们可以采取让go 按钮点击后消失,走完后设置isMyTurn = false,表示我方让出行走权。

然后调用在RicherGameController定义的方法pickOnePlayerToGo(),遍历players_vector,取出一个isMyTurn == true的运行go方法

运行完后,isMyTurn设置为false;

然后继续调用pickOnePlayerToGo(),运行完毕后isMyTurn=false;

假如共有3个角色,运行3次后,所有对象的isMyTurn==false;

这时我们要把isMyTurn再次都设置为true,并让go按钮显示出来,进行下一次轮换行走。

 

大体流程如下:

\

 

 

1、当点击go按钮之后,发送一个消息,代表按钮要消失,当其他角色都执行完行走之后,再发送一个消息,让go按钮显示

2、在GameBaseScene中定制消息接收,根据收到的消息,来让go按钮消失或显示

boolGameBaseScene::init()
{
…………..
	//添加消息接收器
	addNotificationObserver();
	returntrue;
}

//该方法定义接收一个MSG_GO的消息,该消息处理函数为receivedMsgForGo()
voidGameBaseScene::addNotificationObserver()
{
	NotificationCenter::getInstance()->addObserver(
		this,
		callfuncO_selector(GameBaseScene::receivedMsgForGo),
		MSG_GO,
		NULL);
}

voidGameBaseScene::receivedMsgForGo(Object* data)
{
	//把go 菜单放到了menu容器中,以后可以从中取出所有子菜单进行单独处理利于后期扩展
	intretMsgType =((String*)data)->intValue();
	VectorvecMenuItem = getMenu()->getChildren();
	SizewinSize = Director::getInstance()->getWinSize();


	//当收到的信息是1时,表示要显示各个menu项,让菜单从屏幕外移动到屏幕中来
	if(retMsgType ==1)
	{
		for(auto it=vecMenuItem.begin();it!=vecMenuItem.end();it++)
		{
			Node* node = dynamic_cast(*it);
			MoveBy* moveBy = MoveBy::create(0.3,ccp(-(node->getContentSize().width)*2,0));
			//RotateBy* rotateBy =RotateBy::create(1,360,10);
		//Action* action =Spawn::create(moveBy,rotateBy,NULL);
			node->runAction(moveBy);
		
		}
	}else//当收到的信息是0时,表示要隐藏各个menu项,让菜单从屏幕移动到右边屏幕外面
	{
		for(auto it=vecMenuItem.begin();it!=vecMenuItem.end();it++)
		{
			Node* node = dynamic_cast(*it);
			MoveBy* moveBy = MoveBy::create(0.3,ccp((node->getContentSize().width)*2,0));
			//RotateBy* rotateBy =RotateBy::create(1,360,10);
		//Action* action =Spawn::create(moveBy,rotateBy,NULL);
			node->runAction(moveBy);
		
		}
	}
	log(received go message is: %d,retMsgType);
}

	
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
用户名: 验证码:点击我更换图片
最新评论 更多>>

推荐热点

  • cocos2d-x学习笔记(19)--label 、label atlas
  • cocos2d-x学习笔记(23)--地图的使用3--CCTMXLayer
  • Cocos2d-x 2.0 之 Actions “三板斧” 之一
  • Cocos2d-x学习(一):HelloWorld
  • cocos2d-x学习笔记(18)--游戏打包(windows平台)
  • cocos2d 设置屏幕默认方向
  •  Cocos2d-x初学指南(5): Tiled Map的使用(视角移动,碰撞检测)
  • cocos2d-x学习笔记(16)--spritesheet(精灵表单)
  • cocos2d-x学习笔记(15)--地图的使用(TMX)
网站首页 - 友情链接 - 网站地图 - TAG标签 - RSS订阅 - 内容搜索 - 移动版 - 返回顶部
Copyright © 2008-2013 计算机技术学习交流网. 版权所有

豫ICP备11007008号-1