Chapter 3 - How to Move a sprite
http://www.eoeandroid.com/forum.php?mod=viewthread&tid=250529
http://www.cocos2d-x.org/boards/6/topics/10055
Chapter 3 - How to Move a sprite
We have added a hero to the scene in the last chapter Chapter 2 - How to Add a sprite. But the hero is so lonely that we should add some enemies for him to beat down.
The function void addTarget() will complete the work, the enemies will be added into the scene from right to left at random speed.
Declare void addTarget() in HelloWorldScene.h and add the following code to HelloWorldScene.cpp, (and don't forget to add using namespace cocos2d; at the start of HelloWorldScene.cpp)
1// cpp with cocos2d-x
2void HelloWorld::addTarget()
3{
4 CCSprite *target = CCSprite::create("Target.png",
5 CCRectMake(0,0,27,40) );
6
7 // Determine where to spawn the target along the Y axis
8 CCSize winSize = CCDirector::sharedDirector()->getWinSize();
9 int minY = target->getContentSize().height/2;
10 int maxY = winSize.height
11 - target->getContentSize().height/2;
12 int rangeY = maxY - minY;
13 // srand( TimGetTicks() );
14 int actualY = ( rand() % rangeY ) + minY;
15
16 // Create the target slightly off-screen along the right edge,
17 // and along a random position along the Y axis as calculated
18 target->setPosition(
19 ccp(winSize.width + (target->getContentSize().width/2),
20 actualY) );
21 this->addChild(target);
22
23 // Determine speed of the target
24 int minDuration = (int)2.0;
25 int maxDuration = (int)4.0;
26 int rangeDuration = maxDuration - minDuration;
27 // srand( TimGetTicks() );
28 int actualDuration = ( rand() % rangeDuration )
29 + minDuration;
30
31 // Create the actions
32 CCFiniteTimeAction* actionMove =
33 CCMoveTo::create( (float)actualDuration,
34 ccp(0 - target->getContentSize().width/2, actualY) );
35 CCFiniteTimeAction* actionMoveDone =
36 CCCallFuncN::create( this,
37 callfuncN_selector(HelloWorld::spriteMoveFinished));
38 target->runAction( CCSequence::create(actionMove,
39 actionMoveDone, NULL) );
40}
Here, callfuncN_selector(HelloWorld::spriteMoveFinished) backcalls the function spriteMoveFinished(), we need to declare it in the HelloWorldScene.h and define it as follows,
1// cpp with cocos2d-x
2void HelloWorld::spriteMoveFinished(CCNode* sender)
3{
4 CCSprite *sprite = (CCSprite *)sender;
5 this->removeChild(sprite, true);
6}
TIPs:
1. About rand function. srand and rand are c std function. For each platform, you could get the mili-second system time as sand to get a random number. On IPhone, you could get the random number by arc4random() directly
2. The YES and NO in objc are true and false in cpp
3. The callback function is selector:@selector(spriteMoveFinished) in objc, but it is a little complicated to implement in cpp, you could refer to the declarations in cocos2dx\include\selector_protocol.h. There are five different callback types:
- schedule_selector
- callfunc_selector
- callfuncN_selector
- callfuncND_selector
- menu_selector
How to use them is according to the callback function definition. For example, when use the function CCTimer::initWithTarget whose second parameter is a type of SEL_SCHEDULE, we could find its macro-definition schedule_selector(_SELECTOR) in selector_protocol.h, then we declare a callback function void MyClass::MyCallbackFuncName(float), and transform it as the second parameter of CCTimer::initWithTarget.
Then, we should put the enemies into the scene at intervals, add the codes before init() function returns.
1// cpp with cocos2d-x
2// Call game logic about every second
3this->schedule( schedule_selector(HelloWorld::gameLogic), 1.0 );
and implement gameLogic() in HelloWorldScene.cpp. Notice that gameLogic() should be declared as public, otherwise it won't be backcalled.
1// cpp with cocos2d-x
2void HelloWorld::gameLogic(float dt)
3{
4 this->addTarget();
5}
Ok, everything is done, build and run, and enjoy your fruit.
Win32
Chapter 3 - How to Move a sprite的更多相关文章
- Chapter 2 - How to Add a sprite
Chapter 2 - How to Add a sprite 1. Add image resources 1.1add resources on win32 2. Add a sprite TIP ...
- Cocos引擎开发者指南(1-5)
Cocos引擎开发者指南 英文原版:http://www.cocos2d-x.org/docs/programmers-guide/1/ 中午翻译:http://www.cocos.com/doc/t ...
- cocos2dx day 2 - Sprites
1.Sprite 对sprite设置anchor point,对应的位置 // DEFAULT anchor point for all Sprites mySprite->setAnchorP ...
- iOS开发——UI篇OC篇&SpriteKit详解
SpriteKit详解 SpriteKit,iOS/Mac游戏制作的新纪元 这是我的WWDC2013系列笔记中的一篇,完整的笔记列表请参看这篇总览.本文仅作为个人记录使用,也欢迎在许可协议范围内转载或 ...
- Cocos2d-x CCEditBox & CCTextFieldTTF
下面简单记录一下如何Cocos2d-x中创建输入编辑框.在引擎中为我们提供了这样两个类:CCEditBox 和 CCTextFieldTTF. 一.CCEditBox ①这个类文件的位置 ②这个类 ...
- [RxJS] Drag and Drop example
Improving our mouse drag event Our mouse drag event is a little too simple. Notice that when we drag ...
- 每天一本电子书 - JavaScript for Kids: A Playful Introduction to Programming
JavaScript for Kids: A Playful Introduction to Programming 作者: Nick Morgan 出版社: No Starch Press 副标题 ...
- python pygame实现简单的网游
此示例为简单的实现游戏服务器端和客户端的消息同步,使用自定定义协议,引入了twisted网络框架,还有诸多不足(其实就是半成品). 资源下载地址: http://download.csdn.net/d ...
- JQuery Notes
<script type="text/javascript" src="script.js"></script> $(document) ...
随机推荐
- VS2010/MFC编程入门之十四(对话框:向导对话框的创建及显示)
原文地址:http://www.jizhuomi.com/software/166.html 上一讲鸡啄米讲了属性页对话框和相关的两个类CPropertyPage类和CPropertySheet类,对 ...
- BZOJ 1612: [Usaco2008 Jan]Cow Contest奶牛的比赛
Description FJ的N(1 <= N <= 100)头奶牛们最近参加了场程序设计竞赛:).在赛场上,奶牛们按1..N依次编号.每头奶牛的编程能力不尽相同,并且没有哪两头奶牛的水平 ...
- WINDOWS WMI--这是一个神奇的应用
运行:wbemtest.exe
- SPRING IN ACTION 第4版笔记-第三章Advancing wiring-001-DataSource在应用和开发环境之间切换 profile
一. DataSource在应用和开发环境的产生方式不同,可以用srping 的profile管理 Spring’s solution for environment-specific beans i ...
- 【CF】196 Div.2 D. Book of Evil
显然这个图是一课树,看着题目首先联想到LCA(肯定是可以解的).但是看了一下数据大小,应该会TLE.然后,忽然想到一个前面做过的题目,大概是在一定条件下树中某结点旋转成为根后查询最长路径.结果灵感就来 ...
- bzoj1263
观察可得,最大的拆分方法是尽量拆成3,特殊的,如果最后剩下了1,那么就把3+1变成2+2 然后高精度计算即可 var s2,s3,i,n,l:longint; a:..] of longint ...
- UVA_11178_Morley's_Theorem_(计算几何基础)
描述 https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=23&pag ...
- 如何编译Support7Demos测试appcompat
目录(?)[-] 简介 在Eclipse中编译 使用Gradle编译 简介 Google发布的API-18中带上的support-v7包含了appcompat组件,可以在小于API-11的androi ...
- Makefile第四讲:include 引用其它makefile文件
main.cpp #include "classes/fun.h" int main() { Test::display("Hello makefile"); ...
- Entity Framework 学习初级篇2--ObjectContext类的介绍
转自:http://www.cnblogs.com/Tally/archive/2012/09/14/2685014.html 本节,简单的介绍EF中的ObjectContext.ObjectQuer ...