制作飞镖忍者(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.编译运行,往屏幕点击,可以看到子弹发射出去,如下图所示:

发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
用户名: 验证码:点击我更换图片
最新评论 更多>>

推荐热点

  • cocos2d-x学习笔记(19)--label 、label atlas
  • cocos2d-x学习笔记(23)--地图的使用3--CCTMXLayer
  • Cocos2d-x学习(一):HelloWorld
  • cocos2dx在xcode下开发,编译到android上(2)
  • cocos2d 设置屏幕默认方向
  • Cocos2d-x 2.0 之 Actions “三板斧” 之一
  • cocos2d-x学习笔记(22)--地图的使用2(TMX) --Z-Order、AnchorPoi
  • cocos2d-x学习笔记(18)--游戏打包(windows平台)
  • cocos2d-x学习笔记(16)--spritesheet(精灵表单)
网站首页 - 友情链接 - 网站地图 - TAG标签 - RSS订阅 - 内容搜索
Copyright © 2008-2015 计算机技术学习交流网. 版权所有

豫ICP备11007008号-1