跑酷单机游戏游戏中要到蓝关水泵

Cocos2dx游戏开发系列笔记7:一个简单的跑酷游戏萝莉快跑的消化附下载
懒骨头(http://blog.csdn.net/iamlazybone& QQ 青岛 )
我们羡慕和崇拜的人
因为我们的努力
也会来了解我们
还会成为好友
骨头喜欢这样与哲哲共勉
多少个夜晚
一张长长的书桌上
哲哲在左边认真的做着可爱的独特的手作
骨头在右边噼里啪啦敲着自己真正喜欢的代码
中间的pad放部电影 || 放首歌 || 放段《一席》
这就是我们刚认识时憧憬的日子
所以现在是很幸福了
《喵汪大战》原作者:bill_man &http://my.csdn.net/bill_man&
昨晚那个游戏已经成功运行在了手机上,接下来,好好看看代码。
AppDelegate.cpp类
常规的东西,设置FPS,设置是否显示FPS,生成菜单场景类Scene,然后让导演类加载第一个场景。
GameMenuScene.cpp类
大部分工作都在init里,设置背景:
CCSize size = CCDirector::sharedDirector()-&getWinSize();
//菜单背景
CCSprite* bg = CCSprite::create(&MainMenu.png&);
bg-&setScale(0.5);
bg-&setPosition( ccp(size.width/2, size.height/2) );
this-&addChild(bg, 0,0);加载几个按钮,到CCMenu上,然后将CCMenu加载到Scene中
CCMenuItemImage *newGameItem = CCMenuItemImage::create(&newGameA.png&, &newGameB.png&,this,menu_selector(GameMenu::menuNewGameCallback));
newGameItem-&setScale(0.5);
newGameItem-&setPosition(ccp(size.width / 2 + 40,size.height / 2 - 20));
newGameItem-&setEnabled(false);
CCMenuItemImage *continueItem = CCMenuItemImage::create(&continueA.png&, &continueB.png&,this,menu_selector(GameMenu::menuContinueCallback));
continueItem-&setScale(0.5);
continueItem-&setPosition(ccp(size.width / 2 + 40,size.height / 2 - 60));
continueItem-&setEnabled(false);
CCMenuItemImage *aboutItem = CCMenuItemImage::create(&aboutA.png&, &aboutB.png&,this,menu_selector(GameMenu::menuAboutCallback));
aboutItem-&setScale(0.5);
aboutItem-&setPosition(ccp(size.width / 2 + 40,size.height / 2 - 100));
aboutItem-&setEnabled(false);
soundItem = CCMenuItemImage::create(&sound-on-A.png&, &sound-on-B.png&,this,menu_selector(GameMenu::menuSoundCallback));
soundItem-&setScale(0.5);
soundItem-&setEnabled(false);
soundItem-&setPosition(ccp(40,40));
CCMenu* mainmenu = CCMenu::create(newGameItem,continueItem,aboutItem,soundItem,NULL);
mainmenu-&setPosition(ccp(0,0));
this-&addChild(mainmenu,1,3);初始化背景音乐:
//初始化声音
SimpleAudioEngine::sharedEngine()-&preloadBackgroundMusic(&background.mp3&);
SimpleAudioEngine::sharedEngine()-&setBackgroundMusicVolume(0.5);
SimpleAudioEngine::sharedEngine()-&playBackgroundMusic(&background.mp3&);
然后在onEnter方法里,让菜单按钮从无放大至正常大小
void GameMenu::onEnter(){
CCLayer::onEnter();
CCSize size = CCDirector::sharedDirector()-&getWinSize();
CCNode* mainmenu = this-&getChildByTag(3);
mainmenu-&setScale(0);
mainmenu-&runAction(CCSequence::create(CCScaleTo::create(0.5,1),CCCallFunc::create(this, callfunc_selector(GameMenu::menuEnter)),NULL));
}使用getChildByTag()方法取得mainNenu。这也正是为何addChild()时,要加入tag参数了。
CCSequence::create()里,CCScaleTo动作执行完之后,调用GameMenu类的menuEnter方法
然后通过mainmenu-&getChildren();方法获取按钮组,遍历一下,设置为可用。
然后紧跟着一些callBack方法,也就是按钮事件
void GameMenu::menuNewGameCallback(CCObject* pSender)
CCDirector::sharedDirector()-&setDepthTest(true);
CCDirector::sharedDirector()-&replaceScene(CCTransitionPageTurn::create(0.5,GameMain::scene(), false));
}最后是控制背景音乐的方法
void GameMenu::menuSoundCallback(CCObject* pSender)
//设置声音
if(! issound){
soundItem-&setNormalImage(CCSprite::create(&sound-on-A.png&));
soundItem-&setDisabledImage(CCSprite::create(&sound-on-B.png&));
SimpleAudioEngine::sharedEngine()-&playBackgroundMusic(&background.mp3&, true);
soundItem-&setNormalImage(CCSprite::create(&sound-off-A.png&));
soundItem-&setDisabledImage(CCSprite::create(&sound-off-B.png&));
SimpleAudioEngine::sharedEngine()-&stopBackgroundMusic();
再来看看关于界GameAboutScene.cpp
这个类里,在init方法中贴几个CCSprite,加一个CCMenuItemImage及点击事件即可。没什么特别的。
GameObjStar.cpp星星类
本身继承自CCNode,有一个设置是否可见的方法
void GameObjStar::set_visable(bool var){
_visable =
this-&setVisible(var);
}在onEnter方法中初始化一下:缩放至一半大小,设置是否可见,设置尺寸。
void GameObjStar::onEnter(){
CCNode::onEnter();
//星星初始化
this-&setContentSize(CCSizeMake(36.5,35.5));
CCSprite* star = CCSprite::create(&star.png&);
star-&setScale(0.5);
_visable =
addChild(star,1);
GameMark.cpp分数类
也是继承自CCNode,同样在onEnter方法里初始化,前面的socre是一个固定的CCSprite,后面是5个CCSprite,根据每个位数来动态修改图片
void GameMark::onEnter()
CCNode::onEnter();
CCSize size = CCDirector::sharedDirector()-&getWinSize();
this-&setContentSize(size);
// bits = CCArray::create(5);
bits=new CCArray(5);
CCSprite *title= CCSprite::create(&score.png&);
title-&setPosition(ccp(size.width/2 + 120,size.height - 15));
title-&setScale(0.5);
addChild(title);
for(int i = 0;i & 5;i ++){
CCSprite * shu = CCSprite::create(&shu.png&);
ui = shu-&getTexture();
shu-&setScale(0.5);
shu-&setTextureRect(CCRectMake(234,0,26,31));
shu-&setPosition(ccp(size.width - 15 - i * 15,size.height - 15));
bits-&addObject(shu);
addChild(shu);
bits-&retain();
}bits-&retain();// 应该是防止数组被回收
下面是按位设置数字,这种自定义rect的舒适化CCSprite的方式是第一次出现,其他的没什么了。
setTextureRect(CCRectMake((temp - 1) * 26,0,26,31));
void GameMark::addnumber(int var){
//按位设置数字
int temp = mark % 10;
if(temp & 0){
((CCSprite *)bits-&objectAtIndex(0))-&setTexture(ui);
((CCSprite *)bits-&objectAtIndex(0))-&setTextureRect(CCRectMake((temp - 1) * 26,0,26,31));
((CCSprite *)bits-&objectAtIndex(0))-&setTexture(ui);
((CCSprite *)bits-&objectAtIndex(0))-&setTextureRect(CCRectMake(234,0,26,31));
temp = (mark % 100) / 10;
if(temp & 0){
((CCSprite *)bits-&objectAtIndex(0))-&setTexture(ui);
((CCSprite *)bits-&objectAtIndex(1))-&setTextureRect(CCRectMake((temp - 1) * 26,0,26,31));
((CCSprite *)bits-&objectAtIndex(0))-&setTexture(ui);
((CCSprite *)bits-&objectAtIndex(1))-&setTextureRect(CCRectMake(234,0,26,31));
temp = (mark % 1000) / 100;
再来看下萝莉类GameObjHero.cpp
首先在void GameObjHero::onEnter()方法里初始化。
接受触摸:
&pDirector-&getTouchDispatcher()-&addTargetedDelegate(this, 0, true);
初始化萝莉:
mainsprite = CCSprite::create(&s_1.png&);
CCAnimation * animation = CCAnimation::create();
animation-&addSpriteFrameWithFileName(&s_1.png&);
animation-&addSpriteFrameWithFileName(&s_2.png&);
animation-&addSpriteFrameWithFileName(&s_3.png&);
animation-&addSpriteFrameWithFileName(&s_4.png&);
animation-&addSpriteFrameWithFileName(&s_5.png&);
animation-&addSpriteFrameWithFileName(&s_6.png&);
animation-&setDelayPerUnit(0.1f);
animation-&setRestoreOriginalFrame(true);
//运行奔跑动画
mainsprite-&runAction(CCRepeatForever::create(CCAnimate::create(animation)));上面这种添加动画的方式,是骨头第一次遇到。
首先创建CCAnimation,然后设置每一帧的图片,然后设置每帧的延迟时间,设置播放完动画后是否回到第一帧。
然后是构造一个循环播放的CCRepeatForever动画,添加到精灵上。
里面有个设置状态方法:
switch(state){
case 1://跳跃
this-&stopAllActions();
mainsprite-&stopAllActions();
mainsprite-&setTexture(jump);
this-&runAction(CCSequence::create(CCJumpBy::create(2.5,ccp(0,0),100,1),CCCallFunc::create(this, callfunc_selector(GameObjHero::jumpend)),NULL));
case 2://受伤
this-&stopAllActions();
mainsprite-&stopAllActions();
mainsprite-&setTexture(hurt);
this-&runAction(CCSequence::create(CCBlink::create(3, 10),CCCallFunc::create(this, callfunc_selector(GameObjHero::hurtend)),NULL));
((GameMain *)this-&getParent())-&setover();
跳跃,则运行CCJumpBy动画,受伤则运行CCBlink动画,就是一闪一闪的,并且在动画结束分别调用相应的方法。
然后是GameObjMap.cpp地图类
void GameObjMap::bg1change(){
//运动出屏幕重设位置,运动
CCSprite * bg = (CCSprite *)this-&getChildByTag(0);
bg-&setPosition(ccp(480,320));
bg-&runAction(CCSequence::create(CCMoveBy::create(4,ccp(-960,0)),CCCallFunc::create(this, callfunc_selector(GameObjMap::bg1change)),NULL));
for(int i = 0;i & 5;i ++){
((GameObjStar *)stars1-&objectAtIndex(i))-&set_visable(true);
void GameObjMap::bg2change(){
//运动出屏幕重设位置,运动
CCSprite * bg = (CCSprite *)this-&getChildByTag(1);
bg-&setPosition(ccp(480,320));
bg-&runAction(CCSequence::create(CCMoveBy::create(4,ccp(-960,0)),CCCallFunc::create(this, callfunc_selector(GameObjMap::bg2change)),NULL));
for(int i = 0;i & 5;i ++){
((GameObjStar *)stars2-&objectAtIndex(i))-&set_visable(true);
}楼上两个方法作用是背景循环,callfunc_selector方法调用的是对方,一对好机油!
bg1-&runAction(CCSequence::create(CCMoveBy::create(2,ccp(-480,0)),CCCallFunc::create(this, callfunc_selector(GameObjMap::bg1change)),NULL));
bg2-&runAction(CCSequence::create(CCMoveBy::create(4,ccp(-960,0)),CCCallFunc::create(this, callfunc_selector(GameObjMap::bg2change)),NULL));
其实整个背景地图的宽度是两倍的可视屏幕宽度,即480*2=960,这样的地图有两套,两套地图的动画在第一次运行时正好差半个周期,而且是互相调用,呈现出来的效果就是一直循环下去。恩,懂了。
然后在两套地图上绘制植物、草地等元素。
最后是核心逻辑类:GameMainScene.cpp
首先在初始化方法里,把游戏的所有元素都实例化一下,比如萝莉,比如地图,比如分数星星等。
最主要的循环方法:
scheduleUpdate();
void GameMain::update(float time){}
在update里面判断是否跟星星相撞,
bool GameMain::isCollion(CCPoint p1,CCPoint p2,int w1,int h1,int w2,int h2){
if(abs(p1.x - p2.x) & w1 + w2 && abs(p1.y - p2.y) & h1 + h2){
判断是否是掉落状态:
void GameMain::isherodrop(){
CCPoint p1 = (map-&getChildByTag(0))-&getPosition();
CCPoint p2 = (map-&getChildByTag(1))-&getPosition();
if(p1.x &= 100 && (p1.x + 480) &= 100){
temp = (100 - p1.x) / 64;
if(bg1shu[temp] == -1){
hero-&setState(2);
temp = (100 - p2.x) / 64;
if(bg2shu[temp] == -1){
hero-&setState(2);
}上面方法比较难懂,大意就是根据当前地图的x值位置,来取得主角所站的位置有没有石头,没有的话即掉落。
temp = (100 - p1.x) / 64;100是因为萝莉站在x=100的位置,所以要得到萝莉所在位置是否为空,即bg2shu[temp] == -1
地图是这样添加的
& //星星,植物等大图素的添加
& & for(int i = 0;i & 7;i ++){ & //960/8=120
也就是说在960像素宽度的背景图上,可以放8个宽度等于120的元素。
static const short bg1shu[] = {-1,1,0,2,-1,1,2,3};
static const short bg2shu[] = {3,3,-1,3,-1,3,3,-1};
然后根据 数组的值来放置元素,-1时为空。
本篇完结 & 点此下载
http://download.csdn.net/detail/iamlazybone/6632923&
好了,《萝莉快跑》的例子到此算是消化了大部分了。
看3遍不如自己动手敲1遍,赶紧去噼里啪啦一下吧:)
大家晚安。
------------------- 飞船起飞-------------------- & &
Cocos2dx游戏开发系列笔记13:一个横版拳击游戏Demo-中Cocos2dx游戏开发系列笔记12:一个横版拳击游戏Demo-上
Cocos2dx游戏开发系列笔记11:解刨《战神传说》完结篇
Cocos2dx游戏开发系列笔记10:解刨《战神传说》
Cocos2dx游戏开发系列笔记9:android手机上运行《战神传说》,并解决横竖屏即分辨率自适应问题
Cocos2dx游戏开发系列笔记8:开搞一个射击游戏《战神传说》//就个打飞机的
Cocos2dx游戏开发系列笔记7:一个简单的跑酷游戏《萝莉快跑》的消化(附下载)
Cocos2dx游戏开发系列笔记6:怎样让《萝莉快跑》的例子运行在vs和手机上Cocos2dx游戏开发系列笔记5:继续润色《忍者飞镖射幽灵》
Cocos2dx游戏开发系列笔记4:怎样新加一个Scene类?
Cocos2dx游戏开发系列笔记3:牛刀小试-&忍者飞镖射幽灵的Demo
Cocos2dx游戏开发系列笔记2:一个刚创建的cocos2dx中的demo里都有什么
Cocos2dx游戏开发系列笔记1:一个崭新的开始,cocos2dx2.2+ndkr9+Cygwin+vs2012游戏开发环境搭建
-------------------- 飞船降落--------------------&
最后,骨头介绍一下陪在身边的哲哲(右边就是低调的哲哲)
> 本站内容系网友提交或本网编辑转载,其目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。如涉及作品内容、版权和其它问题,请及时与本网联系,我们将在第一时间删除内容!
Cocos2dx游戏开发系列笔记7:一个简单的跑酷游戏&萝莉快跑&的消化(附下载) 分类: cocos2dx 23:09 2253人阅读 评论(2) 收藏
cocos2dx引擎游戏vs2012手机 懒骨头(http://blog.csdn.net/iamlazybone
QQ 青岛 ) 或许有天 我们 ...
懒骨头(/iamlazybone)或许有天我们羡慕和崇拜的人因为我们的努力也会来了解我们说不定还会成为好友骨头喜欢这样与哲哲共勉多少个夜晚一张长长的书桌上哲哲在左边认真的做着可爱的独特的手作骨头在右边噼里啪啦敲着自己真正喜欢的代码中间的pad放部电影 || 放首歌 || 放段&一席&这就是我们刚认识时憧憬的 ...
懒骨头(http://blog.csdn.net/iamlazybone QQ: ) 旁边一直在放着台湾的金马奖 将了一群人在做喜欢的事情努力拼搏最后实至名归的故事 骨头也希望有天能优秀到被自己钦佩的人所关注 继续吧 源码下载 -& 来自游戏开发基友群听雨分享的例子,一个横版过关游戏,有带简单ai的敌人,有横版的地图,有操控摇杆,主角 ...
懒骨头(http://blog.csdn.net/iamlazybone QQ: ) 写下这些东西的同时 旁边放了两部电影 周星驰的&还魂夜& 甄子丹的&特殊身份& 骨头听着电影读代码 别有一番风味 接上篇,今天继续看一下这个demo. ---------------------------------------- ...
懒骨头(http://blog.csdn.net/iamlazybone
QQ 青岛 ) 又是一个愉快的夜晚 还是那张长长的工作桌 哲哲在左边做一个香云纱手包 骨头在这里噼里啪啦的解刨 pad里放着&赢在中国& 桌子中间各种饮料.奶.水果... 进击吧-骨头- 首先感谢Android技术开发群()的SW同学提供 ...
懒骨头(http://blog.csdn.net/iamlazybone
QQ 青岛 ) 有点晚了,眼睛开始痒痒了,赶紧记录点东西 刚请教了sw同学,跟听D也扯了会,苦命的孩子,今晚他们游戏发新版,前端必须加班,骨头好是羡慕... 前几个笔记的例子都是zai一个Scene.cpp里完成的,想新加一个,结果老报找不到类. 解决方法: 把新加 ...
懒骨头(http://blog.csdn.net/iamlazybone
QQ 青岛 ) 烦人的环境终于ok了,改了改文本,换了换图片资源,还是能在手机里运行.ok,关了Eclipse,去vs中看看吧. 虽然是根老骨头了,但还真没怎么用C++,以前接触过点Java的开发框架,估计大差不差. 在VS2012中打开用python命令新建的La ...
懒骨头(http://blog.csdn.net/iamlazybone
QQ 青岛 ) Android开发者做cocos2dx最大的绊脚石,不是c++,而是环境的搭建... 骨头也是费了半天劲才终于在真机上看到了那个类似猕猴桃的头,这里简单记录一下. 环境:(算比较新了) cocos2dx 2.2 ndk r9 cy ...动作跑酷游戏《蓝精灵史诗跑酷》测试上架_海外_游戏鸟
您的位置:&& >
动作跑酷游戏《蓝精灵史诗跑酷》测试上架
16:24&&&&&&来源:网络&&&&&&作者:阿敏陛下&&&&&&&&&&&&
最近育碧已经连续有几款移动游戏在新西兰区测试上架了,而今天育碧又有一款风格无比清新的动作跑酷游戏&&《蓝精灵史诗跑酷(Smurfs Epic Run)》,这次是大家无比熟悉的主题和形象,游戏中玩家操控蓝精灵在关卡中跳跃躲避障碍,收集金币,并且救出被困在笼子里的其他蓝精灵。
游戏鸟官方微信
youxiniao(扫我)
每日推送最热最新的
好玩的单机手游
《致命狙击》是一款令人上瘾的第一人称射击游戏。
雷亚全新音游大作,尽情享受音乐与青春。
好玩的网游手游
虚拟与现实相结合的大型多人互动游戏。
西山居原班人马打造,再造一个充满爱恨情仇的江湖。
游戏库推荐有个手机游戏有很多关卡的跑酷类型(外国)有白色和蓝色的长方形块(还有圆筒的)踩蓝色的加分。_百度知道跑酷类游戏集合:跑到世界尽头也停不下来!
()出品,转载请注明!】一年前,由于一款《神庙逃亡》的跑酷游戏的兴起导致跑酷类迎来了一个春天,各种以跑酷为题材的游戏层出不穷,其中以《天天酷跑》最为火爆。今天小编带大家盘点一下那些经典的跑酷游戏。
大家都在看
正文已结束,您可以按alt+4进行评论
相关阅读:
相关搜索:
热门搜索:
Copyright & 1998 - 2016 Tencent. All Rights Reserved热门搜索:
当前位置:&&&&&&地铁跑酷掉到路障上可以让人跳的更高的方法
地铁跑酷掉到路障上可以让人跳的更高的方法
时间:作者:小皮小编来源:小皮网
  在本作中我们经常会遇到一些无解的情况,这时候部分童鞋就会说是因为装备不够好运气不行才导致这样的。但是实际上那些大神为什么能够获得那么高的分数,难道其中真的没有什么特殊的技巧么。答案很明显是否定的,而技巧时间也算需要练习的。
  实际上这一技巧对地形的限制比较大,不能够随时用出来。但是不失为一种被三个火车开过来自己却在地上的逃生技巧,如上图所示这一技巧需要我们有一个路障。
  我们需要利用路障上方的碰撞体积,让我们能够跳的更高。因为只有跳高了,我们才能够利用高度优势跳到右边的火车顶上。这样我们才能够对付一些无解的地形。
  基本上上图的位置起跳,在路障位置我们会有一个停顿。这时候人物的属性是重置的,所以我们还能够再次跳起来。两次起跳叠加的高度无疑是能够轻松超越火车的,所以我们这时候向左边滑动手指即可。
评论(0条评论)
类&&&型:体育比赛
评&&&分:分
Copyright 2008- 小皮游戏网 All Rights Reserved.闽ICP备号-1
厦门小皮网络有限公司
联系电话:
文网文[8号

我要回帖

更多关于 地铁跑酷游戏下载 的文章

 

随机推荐