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

来源:互联网 发布:ubuntu 配置dns 编辑:程序博客网 时间:2024/05/03 13:29

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

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

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。其实还是很简单的代码,将其放入数组是用于优化游戏,方便删除,节省资源占用。其实做的时候会有很多细节需要处理,例如不放入数组删除,程序运行久了之后就会有点卡,可以试试。

0 0
原创粉丝点击