zoukankan      html  css  js  c++  java
  • 关于Cocos2d-x中物理世界的物体乱跳的问题的解决

    这是电脑短时间内帧率低,无法满足游戏配置的帧率引起的。

    解决方法:

    第一种:

    1.打开AppDelegate.cpp文件

    2.把director->setAnimationInterval(1.0 / 60);改为 director->setAnimationInterval(1.0 / 50);或者更低一点。

    这样游戏性能会有些许的下降,就是游戏会变的卡一点,但是物体不会乱跳,在真机上运行,我相信不会出现乱跳的情况。所以等开发完后再把帧率调回来。

    第二种:

    把setPosition里面的参数都用变量的形式表示,不要直接用常量,用变量比较稳定,亲试可行。

    用常量表示其实是非常不好的,因为如果改变屏幕分辨率,就会造成混乱,最好是用屏幕尺寸的几分之几来表示。

    第三种:

    用简单的精灵节点来代替节点加子节点的形式,亲试可行。

    Sprite::init();
    setTexture("s_1.png");
    setScale(0.2);
    setPhysicsBody(PhysicsBody::createBox(this->getContentSize()));

    第四种:

    在有接触的实例物理对象的初始化方法init()中加上这几句

    getPhysicsBody()->getShape(0)->setFriction(0);   //使此刚体的摩擦力为0
    getPhysicsBody()->getShape(0)->setRestitution(0);  //使此刚体的弹性为0

    之前在有接触的两个刚体之间,我只在其中一个的初始化方法init()中加上这两句,结果还是会突然跳一下,后来我在两个有接触的刚体之间都加上这两句,就没有突然跳一下,很稳。

    第五种(非常有效):

    在主角的init方法中把刚体属性设置成

    getPhysicsBody()->setDynamic(true);  //是动态刚体,可以产生碰撞事件
    getPhysicsBody()->setGravityEnable(false);  //不受重力影响

    然后再定义一些动作,这些动作等价于以前是靠重力实现的动作,只是现在我们用最普通的动作来代替它们,像JumpTo,MoveTo,Blink等等代替_hero->getPhysicsBody()->setVelocity(Vec2(0, 400));

    //停止之前的所有动作
    this->stopAllActions();
    //sprite->stopAllActions();

    //把帧动画变成跳跃的纹理
    this->setTexture(jump);

    startPosition = size.height / 4;
    JumpTo *jump = JumpTo::create(1, Vec2(200, startPosition), startPosition, 1);
    //回调函数把状态重新设置成行走,执行程序时跳过这个函数,这个函数处于等待被调用的状态,直到有人用它的时候才调用
    CallFunc *call = CallFunc::create([this](){
      setState(0);
    });
    //设置动作队列,先跳跃,再回去调用call,变成行走的动作
    this->runAction(Sequence::create(jump, call, NULL));

    这种方法让主角不会受物理世界重力的影响,运行起来非常稳定,一些主角跑出边界的问题也不存在了。

  • 相关阅读:
    音乐
    脚本注释的作用
    JavaScript状态栏冒泡
    JavaScript动态显示时间
    正则表达式
    JavaScript数组的最大长度
    加密(编码)web.config中的信息(如:连接字符串)
    JavaScript实现EMAIL功能
    JavaScript检测分辨率
    JavaScript如何给网页滚动条加上颜色?
  • 原文地址:https://www.cnblogs.com/HangZhe/p/5719656.html
Copyright © 2011-2022 走看看