欢迎来到天天文库
浏览记录
ID:13984316
大小:61.00 KB
页数:8页
时间:2018-07-25
《游戏开发引擎—cocos2d-x地图随精灵无限滚动与边缘检测--之游戏开发《赵云要格斗》(3)》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、游戏开发引擎—Cocos2d-x地图随精灵无限滚动与边缘检测--之游戏开发《赵云要格斗》(3)本文检索关键词:游戏引擎,游戏开发引擎,cocos引擎html5游戏开发本本章在前文《Cocos2d-x自定义按钮类控制精灵攻击》的基础上,实现了精灵向右运动到地图中间时,地图能跟着移动,但此时精灵是原地不动只是播放跑动画。并且,当地图移动到边缘时,地图不在移动,但此时精灵能移动同时播放跑动画。网上看了些别人写的地图,很多都是通过两张地图交替显示来实现,这里我就想通过一个地图来实现,英雄移动到地图的最左边或最右边时,地图不能移动,但是英雄还是
2、能移动。这样比较符合我们玩游戏时的情形。Cocos2d-x版本:2.2.5工程环境:windows7+VS2010下面是要滚动的地图,只有一张,但是很长。先看看效果一、在英雄类中增加判断英雄是否运动到了窗口的中间位置函数在上一篇的英雄类中再增加一个函数:12345678910//判断英雄是否运动到了窗口的中间位置,visibleSize为当前窗口的大小 bool JudgePositona(CCSize visibleSize); 然后这是它的实现:bool Hero::JudgePositona (CCSize visibleS
3、ize) { if(this->getPositionX()!=visibleSize.width/2)//精灵到达左边 return false; else return true;//到达中间位置 }二、自定义地图类这里为了后头地图能再实现其它功能,我自己又设计了一个地图类,它能根据英雄的运动还判断是否要移动地图。其实这里的地图就是一个CCSprite,然后把它加到当前类中,这个类是从CCNODE中派生的。然后根据当前英雄的位置来判断自己是否在进行移动,在Mo
4、veMap(CCNode*hero,CCSizevisibleSize)这个函数中,其实实现得很简单。传入当前英雄和当前窗口的大小,然后就是一些判断了。直接看代码Map.h:12345678910111213#ifndef __MAP_H__ #define __MAP_H__ #include "cocos2d.h" USING_NS_CC; class Map:public CCNode { public: Map(); ~Map(); //初始化地图,
5、window_sizeo为控制台大小 void InitMap(const char *map_name,const CCSize &window_size); //根据精灵的位置移动地图,visibleSize为当前窗口的大小 void MoveMap(CCNode *hero,CCSize visibleSize); //判断地图是否到达边缘 14151617181920212223 bool JudgeMap(CCNode *hero,CCS
6、ize visibleSize); //virtual void update(float delta); CREATE_FUNC(Map); private: CCSprite *m_map;//地图精灵 }; #endif // __MAP_H__然后这是它的实现Map.cpp:1234567891011121314#include "Map.h" Map::Map():m_map(NULL) { } Map::~Map(
7、) { } void Map::InitMap(const char *map_name,const CCSize &window_size) { this->m_map=CCSprite::create(map_name); m_map->setAnchorPoint(ccp(0,0));//设置锚点 this->setAnchorPoint(ccp(0,0));//设置锚点 this->addChild(m_map); } void Map::MoveMap(CCN
8、ode *hero,CCSize visibleSize)// { 151617181920212223242526272829303132 if(hero->getPositionX()==visibleSi
此文档下载收益归作者所有