zoukankan      html  css  js  c++  java
  • 基于Cocos2d-x-1.0.1的飞机大战游戏开发实例(下)

    在飞机大战游戏开发中遇到的问题和解决方法:

    1.在添加菜单时,我要添加一个有背景的菜单,需要在菜单pMenu中添加一个图片精灵,结果编译过了但是运行出错,如下图:

    查了很多资料,调试了很长时间,整个人都要崩溃了。

    最后发现引擎中CCMenu::itemForTouch函数中有遍历子节点的行为,但是循环中没有判断子节点类型是否为CCMenuItem。如图:码,这样一来,加入到pMenu中的图片精灵被当作菜单项取了出来使用,导致报错。老版本的果然又不完善的地方,整个人都不好了...
    果断修改引擎里的源只要在遍历中使用子节点之前判断一下是否为CCMenuItem类型即可,如图:

    2.在开发的时候,难免要用到键盘消息来测试程序功能,但是找了很久发现引擎中没有为我们传出键盘消息。所以...果断修改源码。


    步骤一:在CCLayer类声明中public下添加virtual void processWin32KeyPress( UINT message, WPARAM wParam, LPARAM lParam) {}
    步骤二:在CCEGLView类声明中private下添加变量CCLayer *m_pLayWin32Key;在public下添加函数void SetWin32KeyLayer(CCLayer *pLayer){m_pLayWin32Key = pLayer;}
    步骤三:在CCEGLView构造函数中初始化CCLayer(NULL);WindowProc函数最开始添加if (NULL != m_pLayWin32Key){m_pLayWin32Key->processWin32KeyPress(message, wParam, lParam);}
    步骤四:重新生成libcocos2d;
    步骤五:在继承于CCLayer类的子类的构造或者初始化函数中添加CCDirector::sharedDirector()->getOpenGLView()->SetWin32KeyLayer( this );
    步骤六:在子类中重写processWin32KeyPress函数处理键盘消息;
    步骤七:子类的析构或析构之前的函数中添加CCDirector::sharedDirector()->getOpenGLView()->SetWin32KeyLayer( NULL)。
    这样我们就可以随心所欲地处理消息了。

    3.在用键盘方向键控制飞机移动时,发现总有些卡顿。其实是这种机制有问题。
    解决方法:不要再处理消息时移动飞机,而是在处理消息时仅仅设置运动方式,在回扫刷新函数中,根据飞机的运动方式去移动飞机。

  • 相关阅读:
    70.BOM
    69.捕获错误try catch
    68.键盘事件
    523. Continuous Subarray Sum
    901. Online Stock Span
    547. Friend Circles
    162. Find Peak Element
    1008. Construct Binary Search Tree from Preorder Traversal
    889. Construct Binary Tree from Preorder and Postorder Traversal
    106. Construct Binary Tree from Inorder and Postorder Traversal
  • 原文地址:https://www.cnblogs.com/Ray1024/p/5131695.html
Copyright © 2011-2022 走看看