根据下面两篇文章, 我一步步实践, 成功让程序在 Samsung Galaxy G2 上运行起来, 感谢这些贡献者

http://www.raywenderlich.com/4756/how-to-make-a-catapult-shooting-game-with-cocos2d-and-box2d-part-1

http://mssyy2010.blog.51cto.com/4595971/847000




至于程序的设计和逻辑, 上面两篇文章介绍得很清楚了

现在把源代码提供给大家, 可以从下面的 link 下载

https://github.com/PaynePan/share_src/archive/master.zip


使用方法

1) 解压到cocos 目录下一级, 比如: d: \cocos2d-2.1rc0-x-2.1.2\catapult\

catapult 下有目录 Classes 和 proj.android

2) import proj.android 到 eclipse 中

3) 在 cgywin 中 运行 proj.android/build_native.sh, 生成 libgame.so

4) 再在 eclipse 下编译运行


说明

有几个注意点,说明一下

项目直接使用已经运行的 HelloWorld 改写过来, 主要就是改写 HelloWorldScene.cpp, HelloWorldScene.h

1) build_native.sh 资源文件的 copy 部分略去

coco2dx Android 最头痛的就是 cygwin中运行 build_native.sh 复制资源文件, 那些操作和 win7 下的权限不兼容

所以去掉了 copy 部分, 反正这些文件已经在 proj.android/asset中了


2) 由于 cocos2d 也在不断改进, 现在代码与原文有两处不同

原文

    CCDelayTime *delayAction = CCDelayTime::actionWithDuration(0.2f);        CCCallFunc *callSelectorAction = CCCallFunc::actionWithTarget(this, callfunc_selector(HelloWorld::resetGame));        this->runAction(CCSequence::actions(delayAction,                                            callSelectorAction,                                            NULL));     

现在
scheduleOnce(schedule_selector(HelloWorld::resetGame),0.2f);


原文

    CCTouch *touch = (CCTouch *)touches->anyObject();     CCPoint location = touch->locationInView(touch->view());     location = CCDirector::sharedDirector()->convertToGL(location); 

改为

CCTouch* touch = (CCTouch*)( touches->anyObject() );CCPoint location = touch->getLocation();



3) 在tick中 增加了再次装弹的逻辑


if (m_bulletBody && m_bulletJoint == NULL) { b2Vec2 position = m_bulletBody->GetPosition(); CCPoint myPosition = this->getPosition(); CCSize screenSize = CCDirector::sharedDirector()->getWinSize(); static int count = 0;if ( ++count % 60 ==0) {CCLog("++++++++after  x:%f, y:%f", position.x, position.y);if ( abs(m_bullet_position.x-position.x) < 1.5f &&abs(m_bullet_position.y-position.y) < 1.5f ) {attachBullet();return;}m_bullet_position = position;}// Move the camera. if (position.x > screenSize.width / 2.0f / PTM_RATIO) { myPosition.x = -MIN(screenSize.width * 2.0f - screenSize.width, position.x * PTM_RATIO - screenSize.width / 2.0f); this->setPosition(myPosition); } } 

现在可以简单地玩游戏了.







更多相关文章

  1. 〖Android〗/system/etc/fallback_fonts.xml
  2. 自动编译 打包 签名 android程序
  3. 修改android 开机之后的默认语言成中文
  4. Gradle上传aar到Maven
  5. Android(安卓)下载文件 显示进度条
  6. Android(安卓)JNI入门第三篇——jni头文件分析
  7. First Android(安卓)application
  8. Android用http协议上传文件

随机推荐

  1. Dagger2 in Android(四).android 扩展库
  2. eclipse安装及配置android基础教程
  3. android DecorView的使用
  4. 转载 Android 通过adb shell命令查看内存
  5. EditText仅允许特定类型数据输入
  6. Android(安卓)9.0及以上版本中,关于多进程
  7. Android webview监听网页对话框点击事件
  8. Android实现TextView中部分文字监听事件
  9. Android(安卓)音量控制流程分析
  10. Android投票自定义View