制作飞镖忍者(1) Cocos2d-x 3.0alpha0(2)
来源:未知 责任编辑:责任编辑 发表时间:2013-12-06 08:43 点击:次
在右边屏幕以随机的位置添加怪物精灵,注意计算精灵的位置坐标,默认描点在中心,不要让怪物截断了。然后再以2~4秒的随机总时间,让怪物从右边移动到左边,移动出边界后,即回调函数spriteMoveFinished,进行删除精灵对象,增加的spriteMoveFinished方法如下:
void HelloWorld::spriteMoveFinished(cocos2d::Node *sender) { Sprite* sprite = (Sprite*)sender; this->removeChild(sprite); }接下去就是定时创建怪物,在init函数返回之前,安装定时器,每秒执行一次,代码如下:
this->schedule(schedule_selector(HelloWorld::gameLogic), 1.0);增加gameLogic方法,代码如下:
void HelloWorld::gameLogic(float dt) { this->addMonster(); }7.编译运行,可以看到右边怪物定时增加,并且以不同的速度向左边移动,如下图所示:
8.接着让玩家可以射击子弹,当用户在屏幕点击时,就让玩家往点击的方向进行发送子弹,用户的屏幕点击点并不是子弹移动的最终地,借用原文的一张图片来说明:
要让层可以支持触摸,需要在init方法,添加如下代码:
this->setTouchEnabled(true);
然后重载onTouchesEnded方法,代码如下:
void HelloWorld::onTouchesEnded(const std::vector&touches, cocos2d::Event *event) { Touch* touch = touches.front(); Point location = this->convertTouchToNodeSpace(touch); Size winSize = Director::getInstance()->getWinSize(); Sprite* projectile = Sprite::create("Projectile.png"); projectile->setScale(2); projectile->setPosition(Point(20, winSize.height / 2)); Point offset = ccpSub(location, projectile->getPosition()); if (offset.x <= 0) { return; } this->addChild(projectile); int realX = winSize.width + projectile->getContentSize().width / 2; float ratio = (float)offset.y / (float)offset.x; int realY = realX * ratio + projectile->getPosition().y; Point realDest = Point(realX, realY); int offRealX = realX - projectile->getPosition().x; int offRealY = realY - projectile->getPosition().y; float length = sqrtf(offRealX * offRealX + offRealY * offRealY); float velocity = 480 / 1; float realMoveDuration = length / velocity; projectile->runAction(Sequence::create(MoveTo::create(realMoveDuration, realDest),CallFuncN::create(std::bind(&HelloWorld::spriteMoveFinished, this,projectile)), NULL)); }
首先,得到触摸点,然后创建子弹精灵,算出触摸点与子弹初始位置之差,若触摸点在初始位置的前方(即玩家前方),则添加子弹到层上。以同比例方法,计算出子弹飞向屏幕右边的最终坐标。然后再用勾股定理计算飞行长度,假定速度为每秒480像素,则计算出飞行总时间。之后就是让子弹执行给定的飞行动作,以及之后的删除自身调用。
9.编译运行,往屏幕点击,可以看到子弹发射出去,如下图所示:
相关新闻>>
最新推荐更多>>>
- 发表评论
-
- 最新评论 更多>>