您的位置:首页 > 移动开发 > Cocos引擎

对于基本的捕鱼游戏设计思路(三)——炮弹

2016-09-26 17:23 441 查看
双休的时候休息了两天,玩玩游戏看看电影,也没带电脑所以搞得打包游戏都得今天才弄,然后选择继续写捕鱼游戏之炮弹的生成。

分析炮弹对象,首先炮弹肯定是有它的类型,然后根据点击的坐标发射,每点击一次发射一颗炮弹。它有着自己的动作属性,例如速度和方向,还有金币不足时不允许发射炮弹。

void GameScene::onTouchEnded(Touch* touch, Event* event){

Size visibleSize = Director::getInstance()->getVisibleSize();
auto Location = touch->getLocation();       //获得坐标getLocation();
auto dx = Location.x - battery->getPositionX();
auto dy = Location.y - battery->getPositionY();
auto radian = atan2(dy , dx);
auto inclination = radian * 180 / 3.14;
rotation = -(inclination)+90;
if (rotation <= 90 && rotation >= -90){
battery->setRotation(rotation);
this->makeBullet(type);
auto move2 = MoveBy::create(2, Vec2(dx * 10, dy * 10));
bullet->runAction(move2);
}
}


看代码,设置点击事件,根据点击坐标获取到X和Y,计算出与炮台之间的角度,可以根据炮台的设置点击之后将炮台设置偏转角,重点在于偏转角的弧度与角度之间的转换,atan2(y,x);这个函数先传入偏移Y,再传偏移X。计算出偏转角rotation之后炮台设置该角度,子弹设置该角度。makeBullet(type);type是传入炮台类型从而生成炮弹时就可以根据类型生成不同的炮弹,然后执行炮弹的移动。

void GameScene::makeBullet(int type){
Size visibleSize = Director::getInstance()->getVisibleSize();
if (coin>0){
if (type == 1){
bullet = Sprite::create("zidan1.png");
coin -= 1;
}
else if (type == 2){
bullet = Sprite::create("zidan2.png");
coin -= 10;
}
else if (type == 3){
bullet = Sprite::create("zidan3.png");
coin -= 100;
}
bullet->setRotation(rotation);
bullet->setPosition(Vec2(visibleSize.width / 2 + 90, visibleSize.height / 2 - 333));
this->addChild(bullet, 8);
bulletVec.pushBack(bullet);
}
if (coin<t){
auto gg = Sprite::create("gg.png");
gg->setPosition(visibleSize.width / 2, visibleSize.height / 2 + 290);
addChild(gg, 9);
}
}
这是生成炮弹时代码,当金币小于0是加载GG的图片,就是显示金币不足。当金币大于0时才可以创建炮弹,根据传入的炮台类型type判断生成的炮弹类型,扣除不同金币,设置全局的偏转角,将其放入数组bulletVec。其实还是很简单的代码,将其放入数组是用于优化游戏,方便删除,节省资源占用。其实做的时候会有很多细节需要处理,例如不放入数组删除,程序运行久了之后就会有点卡,可以试试。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息