cocos2dx update跳跃函数

在update函数中写跳跃函数使主角没帧跳跃一小段位移 可以让跳跃动作看起来更加的自然 加入重力加速度等变量 运动更合理

首先在主角的初始化代码中进行初始起跳速度和重力加速的初始化(PS.重力加速度和初始速度不能用现实世界中的标准进行初始化)

//这段代码中设置了主角的起跳速度m_speedY 下落速度m_speedfall 重力加速度 m_speedGrivaty 并且调用了update函数this->scheduleUpdate();

bool Hero::init()

{   m_speedfall=0;

m_speedGrivaty=-500.0f;

m_speedY=250.0f;

m_isJumping=false;

this->scheduleUpdate();

return true;

}

//这段代码位于update函数中 功能是主角的相关位移 运用了运动公式 对位移和速度变化的计算 然后不断重置主角的位置

if(myHero->m_isJumping==true)

{

auto changeY=myHero->m_speedY*data+(1/2)*myHero->m_speedGrivaty*data*data;

myHero->m_speedY=myHero->m_speedY+myHero->m_speedGrivaty*data;

myHero->m_sprite->setPositionY(myHero->m_sprite->getPositionY()+changeY);

}

//这段代码也位于update函数中 主要用于跳跃结束后 重置主角数据并将跳跃状态设置为false

if(isCollideWithHeroX()==true&&myHero->m_isJumping==true&&myHero->m_speedY<0.0f)

{

myHero->m_isJumping=false;

myHero->m_sprite->stopAllActions();

myHero->m_sprite->runAction(Hero::createAnimate());

myHero->m_speedY=250.0f;

return;

}

时间: 2024-11-05 20:24:03

cocos2dx update跳跃函数的相关文章

Cocos2d-x Update Draw 执行

先抛出结果,Update先于Draw执行. 以Android平台来分析 找到Cocos2dRender.java 找到函数 public void onDrawFrame(final GL10 gl) 这是Android OpenGL的刷帧函数,在里面Cocos2d-x执行了Native函数 Cocos2dxRenderer.nativeRender(); 找打Jni目录 Java_org_cocos2dx_lib_Cocos2dxRenderer.cpp JNIEXPORT void JNIC

Cocos2d-x 网络线程与UI线程的同步 继承Node但是不执行Update

在最近的项目中,开始用到网络. 网络通信的话就要有一个循环来接收数据,于是想到直接到Cocos2d-x的主循环中去修改. Cocos2d-x的主循环在CCDirector的MainLoop函数中,在这里我们可以添加一个NetworkClient::Update()来执行网络通信的循环. 但是这样就会修改Cocos2d-x的引擎代码. 想到Unity中的做法,把NetworkClient继承自Node,这样就能继承Node的Update了. 但是加上之后,在AppDelegate中New Netw

cocos2dx基础篇(8)——定时器更新schedule、update

[本节内容] 定时器在大部分游戏中是不可或缺的,即每隔一段时间,就要执行相应的刷新体函数,以更新游戏的画面.时间.进度.敌人的指令等等. cocos2dx为我们提供了定时器schedule相关的操作.其操作函数的定义在CCNode中,所以基本上大多数的引擎类都可以设置定时器,如CCLayer.CCSprite.CCMenu等. 定时器更新的方式分为三类: (1)默认定时器:scheduleUpdate(); (2)自定义定时器:schedule(); (3)一次性定时器:scheduleOnce

关于Cocos2d-x中的scheduleUpdate和update方法的使用

如果要让某类实例对象要连续执行某些语句(比如让每个Block实例从运行框最右边移动到最左边) 要在Block类中增加一些东西 1.先在其.cpp文件的init()函数中执行scheduleUpdate()方法. 2.然后在.h中声明一个虚拟的函数update,并在.cpp文件中定义update,当init中执行scheduleUpdate()时,会不断地调用update函数,里面的语句也不断地被执行,直到执行unscheduleUpdate()时停止调用update()函数,unschedule

cocos2dx小知识——schedule/update不起作用

在开发的过程中,我自己写了一个英雄类Hero,继承自节点类CCNode.可是在构造函数中开启更新函数schedule/update不起作用了. 后来百度了一番,解决了. 主要原因:更新函数的触发事件需要通过父类进行初始化. 解决方法:调用父类的onEnter()函数. 我这里的父类为CCNode,所以只要在构造函数Hero()中最开始的部分加上如下代码即可. // Hero::Hero() { //初始化父类onEnter CCNode::onEnter(); //相关代码... //开启更新

cocos2dx学习之路----第十二篇(关于Node节点的自我更新函数Update探讨及定时器的使用)

这一篇来谈谈关于Node节点比较重要的函数接口,自我更新接口(update)以及定时器. 好,下面先来谈谈节点的自我更新. 每一个Node节点都有自带一个update函数.而当调用ScheduleUpdate()这一方法便会被开启,在每一帧被调用. 我们可能注意到,在AppDelegate中有个setAnimationInterval()的方法,有导演类调用.而这个方法就是设置渲染的帧率的.默认是以60帧每秒进行渲染.当然,并不是真正的每秒就渲染60次,这个只能是差不多达到这个速率,因为程序在运

Cocos2d-x数据持久化-修改数据

修改数据时,涉及的SQL语句有insert.update和delete语句,这3个SQL语句都可以带参数.修改数据的具体步骤如下所示.(1) 使用sqlite3_open函数打开数据库.(2) 使用sqlite3_prepare_v2函数预处理SQL语句.(3) 使用sqlite3_bind_text函数绑定参数.(4) 使用sqlite3_step函数执行SQL语句.(5) 使用sqlite3_finalize和sqlite3_close函数释放资源.这与查询数据少了提取字段数据这个步骤,其他

cocos2dx box2d使用(一)

出处:https://www.evernote.com/shard/s262/sh/bf561bda-0458-4502-835b-903846f81d68/68e6634bddec74c5a2d5f8dd839eba0a 本例子使用的是cocos2d-x 3.0版本 首先创建一个cocos2d的c++工程,这里就不多做说明了!本例子的项目名称是MyGame 其次,在MyGame的工程设置里Build Settings下,把CC_ENABLE_CHIPMUNK_INTEGRATION=1改为CC

【Cocos2d-x 3.0 基础系列一】 各类回调函数写法汇总

一.button回调 1. Lambda 表达式,C++11 Lambda 赋予了Cocos2d-x 3.0创建回调函数的灵活性. auto itemNor = Sprite::create("CloseNormal.png"); auto menuItem = MenuItemSprite::create(itemNor,nullptr,nullptr,[](Ref* sender) { log("show this msg."); }); auto menu =