【问题标题】:ccTouchesMoved in cocos2dxccTouchesMoved 在 cocos2dx 中
【发布时间】:2012-11-12 23:29:26
【问题描述】:

大家好,我是 COCOS2DX 框架的新手,正在尝试开发破砖游戏。我正在关注这个演示 Brick breker game 这个教程在 cocos2d (iPhone) 中。我在 cocos2dx 中编码并正常工作。但是当我实现ccTouchesMoved 方法时。我的代码编译并正常运行,但是当我触摸(单击)屏幕时,它会崩溃并出现错误违规行为。我的代码是

void HelloWorld::ccTouchesMoved(CCSet* touches, CCEvent* event)
{
    if (_mouseJoint == NULL) return;

    CCTouch *myTouch = (CCTouch*)touches->anyObject();
    CCPoint location = myTouch->locationInView();
    location = CCDirector::sharedDirector()->convertToGL(location);
    b2Vec2 locationWorld = b2Vec2(location.x/PTM_RATIO, location.y/PTM_RATIO);
    _mouseJoint->SetTarget(locationWorld);
}

我该如何解决这个问题。请指导我。

【问题讨论】:

  • 您的代码不检查空指针。也许 touches 为空,也许 myTouch 为空,或者 CCDirector::sharedDirector() 返回 NULL。
  • 它在哪一行中断? _mouseJoint->setTarget?
  • 是的,它在同一行中断。
  • 你好,我得到的解决方案我刚刚评论了ccTouchesBegan(CCSet* touches, CCEvent* event) 检查mousejoint null 方法中的条件。但我不认为它的解决方案。你能告诉我我们如何在没有空值的情况下初始化mousejoint。

标签: c++ visual-c++ cocos2d-x


【解决方案1】:
void ClassName::ccTouchesBegan(NSSet *touches, UIEvent* event )
{

      if (_mouseJoint != NULL) return;
      ...
}

可能是您没有将 _mouseJoint 初始化为 NULL。

在你的类的构造函数中,初始化_mouseJoint = NULL;

【讨论】:

    【解决方案2】:

    在您提供的演示中,以下代码初始化了 mouseJoint

    if (_paddleFixture->TestPoint(locationWorld)) {
        b2MouseJointDef md;
        md.bodyA = _groundBody;
        md.bodyB = _paddleBody;
        md.target = locationWorld;
        md.collideConnected = true;
        md.maxForce = 1000.0f * _paddleBody->GetMass();
    
        _mouseJoint = (b2MouseJoint *)_world->CreateJoint(&md);
        _paddleBody->SetAwake(true);
    }
    

    它在 ccTouchesBegan 中

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-13
      • 1970-01-01
      • 1970-01-01
      • 2013-09-06
      相关资源
      最近更新 更多