飞机大战03之飞机发射子弹,添加敌人

飞机发射子弹:

弹幕,是雷电游戏的精华。这就需要对子弹的运动轨迹进行控制。

先做一个最简单的子弹发射,后面再添加各种弹幕(实际上主要是研究弹幕)

说是最简单,其实也是最普通的子弹发射,产生一个颗子弹移动就OK了。

方法:做一个子弹发射的计时器,产生子弹,子弹做MoveBy动作就OK了。

代码:

GameLayer.cpp

void GameLayer::fireSchedule(float dt)
{
	Size screenSize = Director::getInstance()->getWinSize() ;
	Vec2 crePos = m_pPlayerPlane->getPosition() ;//子弹的初始位置
	float flyTime = 1.0f ;
	Sprite * pBullet = Sprite::create("bullet1.png") ;
	pBullet->setPosition(crePos) ;
	addChild(pBullet,ZORDER_BULLET) ;

	flyTime = ((screenSize.height - crePos.y) / screenSize.height)*flyTime ;//移动的时间跟,发射的距离相关

	pBullet->runAction(
		Sequence::create(
		MoveBy::create(flyTime,Vec2(0,screenSize.height - crePos.y)),
		RemoveSelf::create(true),nullptr)
		) ;
}

敌人新建了一个类,因为,到后面敌人可能还需要有一些自己的属性。

EnermySprite.h

#ifndef _ENERMY_SPRITE_H_
#define _ENERMY_SPRITE_H_

#include "cocos2d.h"
USING_NS_CC ;
typedef enum
{
	kEnermyTypeNone = 0,
	kEnermyType1,
	kEnermyType2,
	kEnermyType3,
	kEnermyType4,
}EnermyType;
class EnermySprite : public Sprite
{
public:
	static EnermySprite * createByType(EnermyType type);
	static const char * getImageNameByType(EnermyType type);
public:
	EnermySprite();
	~EnermySprite();

private:

};
#endif

EnermySprite.cpp

#include "EnermySprite.h"

EnermySprite * EnermySprite::createByType(EnermyType type)
{
	const char * pImage = getImageNameByType(type) ;
	EnermySprite * pRet = new EnermySprite() ;
	pRet->initWithFile(pImage) ;
	pRet->autorelease() ;
	return pRet ;
}
const char * EnermySprite::getImageNameByType(EnermyType type)
{
	const char* pImageName = nullptr;
	switch (type)
	{
	case kEnermyType1:
		pImageName = "enemy1.png" ;
		break;
	case kEnermyType2:
		pImageName = "enemy2.png" ;
		break;
	case kEnermyType3:
		pImageName = "enemy3.png" ;
		break;
	case kEnermyType4:
		pImageName = "enemy4.png" ;
		break;
	default:
		break;
	}
	return pImageName ;
}
EnermySprite::EnermySprite()
{

}

EnermySprite::~EnermySprite()
{

}

添加到游戏中:

GameLayer.h

void GameLayer::createEneSchedule(float dt)
{
	int ran = CCRANDOM_0_1() * 4 + 1 ;
	EnermyType type ;
	switch (ran)
	{
	case 1:
		type = kEnermyType1;
		break;
	case 2:
		type = kEnermyType2;
		break;
	case 3:
		type = kEnermyType3;
		break;
	case 4:
		type = kEnermyType4;
		break;
	default:
		break;
	}

	auto pEne = EnermySprite::createByType(type) ;
	float x = CCRANDOM_0_1()*(Director::getInstance()->getWinSize().width - pEne->getBoundingBox().size.width / 2) +  pEne->getBoundingBox().size.width / 2;
	float y = Director::getInstance()->getWinSize().height + pEne->getBoundingBox().size.height / 2 ;
	float flyTime = 2.0f ;
	pEne->runAction(
			Sequence::create(
				MoveBy::create(flyTime,Vec2(0,-(Director::getInstance()->getWinSize().height + pEne->getBoundingBox().size.height))),
				CallFuncN::create(CC_CALLBACK_1(GameLayer::enermyMoveEndCallback,this)),
				RemoveSelf::create(true),nullptr
			)
		) ;
	addChild(pEne) ;
	pEne->setPosition(x,y) ;
	m_pEnermyVec.pushBack(pEne) ;
}
void GameLayer::enermyMoveEndCallback(Node * pNode)
{
	EnermySprite * pEnermy = dynamic_cast<EnermySprite*>(pNode) ;
	m_pEnermyVec.eraseObject(pEnermy);
}

又是一个计时器,记得要添加一个敌人的vector来存放敌人。

时间: 2024-11-03 22:50:52

飞机大战03之飞机发射子弹,添加敌人的相关文章

javascript飞机大战-----004创建子弹对象

/* 创建子弹:因为子弹不是只创建一个所以要用构造函数 注意一点:子弹发射的位置应该是英雄机的正中央的位置,所以需要传点东西进来 */ function Bullet(l,t){ this.l = l;//保留一下传进来的l this.t = t;//保留一下创进来的t //初始图片 this.self = null; //子弹初始left this.left = 0; //子弹初始top this.top = 0; //子弹的速度 this.speed = 2; //子弹编号 因为在引擎里面有

Cocos2d-x 3.0final 终结者系列教程16-《微信飞机大战》实现

看到cocos2d-x推出了3.1版本,真是每月一次新版本,速度, 还有一个好消息就是http://cn.cocos2d-x.org/上线了,祝贺!啥时候把我的视频和教程放上去呢?!!! 本文介绍一款纵版射击游戏的实现,开发环境: win7 vs2012 cocos2d-x3.0final android adt android ndk r9 首先看下最后的效果: (图1,微信飞机大战运行效果) 源码下载地址:http://download.csdn.net/detail/sdhjob/7513

无聊吗?写个【飞机大战】来玩吧(上篇)

01前言介绍 微信小游戏是基于微信客户端的游戏,它即点即玩,无需下载安装,体验轻便,可以和微信内的好友一起玩,比如PK.围观等,享受小游戏带来的乐趣.那如何开发一款属于自己的小游戏呢? 源码地址: https://github.com/A123asdo11/aircraft_war (新版ccc已无法正常使用,需要修复,文章作者花费了大量的时间和精力,在ccc2.0以上版本进行了修复,并在微信小游戏正常运行) 02微信小游戏飞机大战简介 1.大事记 经典飞机大战是腾讯交流软件微信5.0版本在20

android:如何用一天时间,写出“飞机大战”这样的游戏!(无框架-SurfaceView绘制)

序言作为一个android开发者,时常想开发一个小游戏娱乐一下大家,今天就说说,我是怎么样一天写出一个简单的"飞机大战"的.体验地址:http://www.wandoujia.com/apps/edu.njupt.zhb.planegame游戏分析玩过"飞机大战"游戏的都知道,飞机大战中的主要"角色"有:1.玩家飞机2.敌方飞机3.玩家飞机发送的子弹4.敌方Boss飞机发送的子弹我们需要控制的有:1.绘制屏幕内的角色2.控制角色的逻辑,比如:敌方

web版canvas做飞机大战游戏 总结

唠唠:两天的时间跟着做了个飞机大战的游戏,感觉做游戏挺好的.说是用html5做,发现全都是js.说js里一切皆为对象,写的最多的还是函数,都是函数调用.对这两天的代码做个总结,希望路过的大神指点一下,我对这个游戏的思路,可改进优化的代码. 先说一下游戏的基本内容: 打飞机(不要想歪了),有鼠标控制移动英雄机,子弹自动射击:敌机从上而下,有三种敌机: 先说下HTML代码(主要就是这一行): <canvas id="canFly" width="480" heig

飞机大战项目

学习python的一个小项目项目名称:飞机大战项目项目语言:python实现功能:飞机连续发射三个子弹,打中敌机,敌机销毁,飞机碰到敌机,飞机销毁,游戏结束 import pygame from plane_sprites import * class PlaneGame(object): '''飞机大战主游戏''' def __init__(self): print("游戏初始化") # 1,创建游戏的窗口 self.screen = pygame.display.set_mode(

python3飞机大战

一.源代码使用教程及环境配置1.环境配置打开pycharm,进入file,打开settings 打开project interpreter,点击右上方 + 号 搜索pygame模块并导入 到此环境就配置好了. 2.源代码使用教程创建一个新的python文件夹命名为“飞机”在新文件夹下再创建一个文件夹命名为“images”,用来存放游戏所需图片 将以下图片下载到桌面(必须要改名字)并拖到“images”文件夹内(可直接拖拽) 将图片改名为background,格式为png 将图片改名为bullet

cocos2dx 3.0 飞机大战

因为课程须要.然后又水平有限.所以写了个飞机大战.加上不会画画.所以图片资源也是从微信apk解压出来的,设计思路參考的偶尔e网事. 闲话不说.先讲一下设计.大体上一共分为3个场景.场景以下是Layer 開始场景:WelcomeScene -->WelcomeLayer  类似欢迎界面 游戏主场景:GameScene  --> GameLayer  游戏元素加入 和 碰撞检測 结束场景:GameOverScene -->GameOverLayer 然后是游戏的元素,在GameLayer加入

基于Cocos2d-x-1.0.1的飞机大战游戏开发实例(中)

接<基于Cocos2d-x-1.0.1的飞机大战游戏开发实例(上)> 三.代码分析 1.界面初始化 1 bool PlaneWarGame::init() 2 { 3 bool bRet = false; 4 do 5 { 6 CC_BREAK_IF(! CCLayer::init()); 7 8 _size = CCDirector::sharedDirector()->getWinSize(); 9 10 // 设置触摸可用 11 this->setIsTouchEnabled