问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

如何使用Cocos Code IDE和Cocos2d-x开发《一个都不能落下》游戏

发布网友 发布时间:2022-04-12 22:18

我来回答

2个回答

懂视网 时间:2022-04-13 02:39

一、scheduleUpdate 1、scheduleUpdate:此函数是CCNode的函数,每个CCNode只要调用scheduleUpdate更新函数,那么这个CCNode就会响应当前类的update(float dt)函数。 首先在头文件中定义update函数:void update(float dt); 接下来在cpp文件中的初始化

一、scheduleUpdate

1、scheduleUpdate:此函数是CCNode的函数,每个CCNode只要调用scheduleUpdate更新函数,那么这个CCNode就会响应当前类的update(float dt)函数。

首先在头文件中定义update函数:void update(float dt);

接下来在cpp文件中的初始化函数调用scheduleUpdate()函数;

实现update更新函数。

2、schedule:其作用于scheduleUpdate()函数相同,但是scheduleUpdate()默认每一帧都会调用update函数,而schedule则可以自定义调用更新函数的时间间隔。

1)schedule(SEL_SCHEDULE selector,float interval)//

参数1:目标更新函数

参数2:更新间隔

如:schedule(schedule_selector(HelloWorld::myUpdate),1.0f);每秒更新执行一次。只需实现自定义函数myUpdate()

3、停止更新函数的方法

1)停止默认的update函数:unscheduleUpdate();

2)停止自定义更新函数:unschedule(SEL_SCHEDULE selector);

3)停止所有的更新函数:unscheduleAllSelectors();

二、CCProgressTo

1、创建方式

CCProgressTimer::create(cocos2d::CCSprite* sp)

在cocos2d-x中对于进度条计时器设置了两种样式:

1)kCCProgressTimerTypeRadial:扇形进度计时器,常用函数如下:

(1)setPercentage(float fPercentage)//设置进度,范围0-100

(2)setReverseProgress(bool reverse)//设置反向计时

2)kCCProgressTimerTypeBar:条形进度计时器

(1)setMidpoint(CCPoint midPoint)//修改进度计时器的开始位置

参数:中心点,范围0-1,默认值为cpp(0.5,0.5)

当设置参数为cpp(0,y),则会从左到右进行计时

当设置参数为cpp(1,y),则会从右到左进行计时

当设置参数为cpp(x,0),则会从底部到顶部进行计时

当设置参数为cpp(x,1),则会从顶部到底部进行计时

(2)setBarChangeRate(CCPoint var)//修改条形计时器的比例

参数:默认为cpp(1,1)

当设置参数为cpp(1,1)起始计时器的宽高为0,

当设置参数为cpp(0,0)起始计时器的宽高是100%

三、CCScrollView滚动视图

1、创建方式

1)CCScrollView* create(CCSize size,CCNode* container = NULL)//创建一个滚动视图

参数1:滚动视图的尺寸

参数2:滚动视图中的容器,滚动视图的容器可以无限加入节点CCNode对象。

2)CCScrollView::create()//创建一个滚动视图,默认尺寸是200*200

2、常用函数

1)bool isDragging()//用户是否正在对容器进行操作

2)bool isTouchMoved()//用户是否正在移动容器

3)bool isBounceable()//是否开了弹性效果

4)setContainer(CCNode* pContainer)//设置容器,参数为节点CCNode对象

5)setViewSize(CCSize size)//设置滚动视图尺寸

6)setBounceable(bool bBounceable)//设置是否开启弹性效果

7)CCNode* getContainer()//获取容器

8)CCSize getViewSize()//获取滚动视图的尺寸

对于CCScrollView而言,还有一个委托CCScrollViewDelegate监听CCScrollView的状态,CCScrollViewDelegate有两个回调函数,入下:

1)virtual void scrollViewDidScroll(CCScrollView* view)//滚动视图有滚动时响应的函数

2)virtual void scrollViewDidZoom(CCScrollView* view)//滚动视图有缩放时响应的函数

热心网友 时间:2022-04-12 23:47

1.创建新工程

  打开Cocos Code IDE,切换到Lua工作环境

  选择菜单,新建一个Cocos Lua项目,输入项目名:NoOneLeftBehind。

  点击下一步设置屏幕方向和分辨率,确认完成

  这个时候你就可以点击运行按钮,没有问题的话示例demo就会弹出。

  因为分辨率被我们更改过的关系,游戏画面有点变形。

  2.游戏逻辑

  现在我们就可以往游戏项目中添加自己的代码了。由于游戏的代码细节并不是本文的重点,所以这里只简单地介绍《一个都不能落下》的实现原理。整个游戏项目源码可以在我的Github上下载。

  A.main.lua是游戏的入口,在main()函数中我们可以找到场景跳转的代码,这在接口上和Cocos2d-x是保持一致的,因此我们可以很容易上手。在这里我们更改第一个场景为主菜单场景。

  --create scene
  local scene = require("MenuScene")
  local menuScene = scene.createScene()
  
  if cc.Director:getInstance():getRunningScene() then
  cc.Director:getInstance():replaceScene(menuScene)
  else
  cc.Director:getInstance():runWithScene(menuScene)
  end

  B.MenuScene.lua是游戏的主菜单,四种难度的游戏模式可以在这里进行选择。你可以用下面这种方式创建一个menu。

  --create menu
  local function menuCallbackOpenNormal()
  cc.Director:getInstance():replaceScene(require("GameScene").createScene(2))
  end
  
  local normal = cc.MenuItemImage:create("normal.png", "normal.png")
  normal:setPosition(0, 150)
  normal:registerScriptTapHandler(menuCallbackOpenNormal)
  
  ...
  
  local menu = cc.Menu:create(normal, nightmare, hell, inferno)
  self:addChild(menu)

  C.GameScene.lua是游戏的主场景,通过传进来的heroCount设置同时显示几个hero。

  --add hero
  function GameLayer:addControllers()
  local visibleSize = cc.Director:getInstance():getVisibleSize()
  
  local startY = 30
  local gap = (visibleSize.height - startY) / self._heroCount
  
  for i=1, self._heroCount do
  local controller = require("HeroController").createController(self, startY + gap * (i - 1))
  table.insert(self._controllers, i, controller)
  end
  end

  D.在这里我们对英雄和他作用的环境进行了封装。然后在GameScene的每一帧调用HeroController的onUpdate函数,在这个函数中检测一个随机定时器来判断是否应该生成一个新的障碍物。

  -- create block
  function HeroController:onUpdate()
  self.frameIndex = self.frameIndex +1
  if self.frameIndex >= self.nextKeyFrameIndex then
  local block = require("Block").new()
  block:init()
  self._layer:addChild(block)
  block:setPositionY(self._positionY + block:getContentSize().height / 2)
  self:resetTimer()
  end
  end

  E.物理引擎。Hero和,Ground,Block的碰撞这里采用了Cocos2d-x集成的物理引擎。以下代码反映了Hero和Block的碰撞检测。

  -- collision detection
  self.touchListener:registerScriptHandler(onTouchBegan,cc.Handler.EVENT_TOUCH_BEGAN)
  cc.Director:getInstance():getEventDispatcher():addEventListenerWithSceneGraphPriority(self.touchListener, self)
  
  local function onContactBegin(contact)
  self:unscheleUpdate()
  
  cc.Director:getInstance():getEventDispatcher():removeEventListener(self.touchListener)
  cc.Director:getInstance():getEventDispatcher():removeEventListener(self.contactListener)
  
  cc.Director:getInstance():replaceScene(require("GameOver").create(self._heroCount, score))
  end
  
  self.contactListener = cc.EventListenerPhysicsContact:create();
  self.contactListener:registerScriptHandler(onContactBegin, cc.Handler.EVENT_PHYSICS_CONTACT_BEGIN);
  local eventDispatcher = self:getEventDispatcher()
  eventDispatcher:addEventListenerWithSceneGraphPriority(self.contactListener, self);

  F.Block类,封装了障碍物,每一帧向左移动。如果超出了屏幕则删除。

  --move the block
  function update(dt)
  self:setPositionX(self:getPositionX() - 3.5)
  
  if (self:getPositionX() < 0) then
  self:unscheleUpdate()
  
  self:removeFromParentAndCleanup()
  end
  end
  self:scheleUpdateWithPriorityLua(update, 0)

  3.各平台打包

  点击打包按钮,

  如果没有添加本地代码,会提示添加本地代码。

  A.Android打包

  选择打包为APK,选择debug签名或者自定义签名,选择SDK版本,确认生成。

  B.iOS平台打包

  选择打包为IPA,选择证书和平台,确认生成。.....
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
"你是在哪看到我的照片?"怎么说英语 留恋地看着我的照片用英语怎么说? 高德iphone地图下载 苹果手机高德地图怎么下载地图 孕中期适合出游吗 哪些孕妇不适合长途旅行 孕妇坐长途车旅行的好处 孕妇出游的最佳时间 孕晚期适合出游吗 孕妇外出旅行禁忌 小米11烧wifi啥表现 网易云怎么设置在界面的翻译 大爷男扮女装攒百万家产,却沉迷反串无法自拔,后来怎样? 帅气的中性短发 晚上男扮女装出去拍照怎么不被别人看出来 谁给我个失恋的QQ个性签名 要能感动`哭`的啊 6年前,那个因“一百元”被全国人记住的“百元哥”,他现状如何? 62岁河北大爷男扮女装,30年前被家人抛弃,后来怎样? 有什么帅气的中短发 给我推荐个 打理起来不要太麻烦 男生的 如何男扮女装去旅行? 中性短发怎样扎才帅气 西安一男子为享受妇女节半价男扮女装进游乐场,事情的经过有何细节? 除了那一款疤克 其他的祛疤产品不能用吗 中性帅气的短发。 男扮女装出门会不会违法 学生适合剪什么发型 中短发发型省事省时 疤克莱祛疤要多久?如图这种 初中生可以留什么样的帅气短发 老疤痕用什么去? 伤口愈合一个月了,还适合贴美容胶纸或者祛疤的贴吗?一直在用芭克,最近感觉愈合后的伤口出现硬硬的凸起 clannad音乐 梦见发大火,救援逃命是什么征求解 梦见着火,拼命跑,前面有条河,所以就想游河到对岸 奢侈品服装为什么中国人穿衣袖大多偏长 这是不是普遍现象 我经常梦到同一座山 梦见对面山上树林中独有一棵参天大树好不好呢请百度帮我解答好吗? 为什么有的衣服袖子会比平时的衣服袖子长,会到胳膊和手臂的关节处,那是什么衣服? 如何截长屏幕截图苹果 凉拌木耳怎么做好吃些? 美图看看 怎样截屏 为什么国外军款衣服袖子都很长 梦见去什么地方参观,看见一棵大树上满了粉色的花,花有木棉花那么大。我手扶树枝让朋友拍张照一小心把... 为什么现在的外套都做的那么短,袖子却都那么长?把我们当猴子吗? 梦见树上的山揸籽被掏空了? 佛祖和燃灯古佛的先后顺序? 凉拌木耳需要什么调料? 新买的衣服,就是袖子太长了,还有袖子太肥了,可以到外边修改吗?改的了吗? 燃灯古佛的前身是什么? 科目一考试注意这几点,要不这辈子也过不了 佛祖上面有燃灯 燃灯古佛上面有谁? 燃灯古佛,药王师佛,如来佛的前后顺序