1. 当前所在位置:
  2. 首页
  3. 游戏打鱼

基本的捕鱼游戏设计思路——炮弹

2018-12-18 admin
分析炮弹对象,首先炮弹肯定是有它的类型,然后根据点击的坐标发射,每点击一次发射一颗炮弹。它有着自己的动作属性,例如速度和方向,还有金币不足时不允许发射炮弹。
 
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。其实还是很简单的代码,将其放入数组是用于优化游戏,方便删除,节省资源占用。其实做的时候会有很多细节需要处理,例如不放入数组删除,程序运行久了之后就会有点卡,可以试试。
--------------------- 
 
捕鱼驾到