如何利用Java编写java雷电游戏射击类游戏

Java 雷电游戏(完成) - 开源中国社区
当前访客身份:游客 [
当前位置:
发布于 日 12时,
&无详细内容&
代码片段(5)
Bullet.java&~&649B&&&&
package com.ruxia.
import java.awt.G
import java.awt.I
import java.awt.T
public class Bullet {
public int x,y;
//子弹大小
public int width,
//子弹杀伤力
//子弹图片
//是否存活
public boolean isLive=
//子弹类型(好坏)
public boolean isG
public void drawBullet(Graphics g)
Toolkit tk=Toolkit.getDefaultToolkit();
Image img1=tk.getImage(Bullet.class.getClassLoader().getResource("image/"+img));
g.drawImage(img1, x,y,width,height,null);
Explode.java&~&921B&&&&
package com.ruxia.
import java.awt.G
import java.awt.I
import java.awt.T
public class Explode {
//定义爆炸显示的图片
String img[]={"boom1.jpg","boom2.jpg","boom3.jpg","boom4.jpg","boom5.jpg","boom6.jpg","boom7.jpg","boom8.jpg","boom9.jpg"};
//爆炸的生命
public boolean isLive=
//定义下标
private int index=0;
public Explode(int x, int y) {
public void drawExplode(Graphics g)
//得到工具类
Toolkit tkToolkit=Toolkit.getDefaultToolkit();
//得到图片对象
//得到数组中的图片
String image=img[index];
Image img1=tkToolkit.getImage(Explode.class.getClassLoader().getResource("image/"+image));
g.drawImage(img1, x,y,null);
if(index&=img.length)
//生命消失
MyFrame.java&~&6KB&&&&
package com.ruxia.
import java.awt.F
import java.awt.G
import java.awt.I
import java.awt.T
import java.awt.event.KeyA
import java.awt.event.KeyE
import java.awt.event.WindowA
import java.awt.event.WindowE
import java.util.ArrayL
import java.util.R
import javax.swing.JF
public class MyFrame extends Frame {
public static final
int WIDTH=900;
public static final
int HEIGHT=700;
public static int my_x=450;
public static int my_y=600;
public static int score=0;
//定义变量,专门表示键盘按下的键
public static boolean a=public static boolean s=public static boolean d=public static boolean w=public static boolean j=
//敌机的集合
public ArrayList&Person& personAll=new ArrayList&Person&();
//存放爆炸效果的集合
public static ArrayList&Explode& explodeAll=new ArrayList&Explode&();
//存放子弹的集合
public static ArrayList&Bullet& bulletAll=new ArrayList&Bullet&();
public MyFrame()
this.setTitle("雷电"+score);
this.setSize(WIDTH,HEIGHT);
this.setLocationRelativeTo(null);
this.setResizable(false);
this.addWindowListener(new MyWindowClose());
//添加键盘监听器
this.addKeyListener(new MyKeyDown());
this.setVisible(true);
MyThread t=new MyThread();
t.start();
//定义背景Y座标
int bg_y=0;
public void paint(Graphics g) {
Toolkit tk=Toolkit.getDefaultToolkit();
Image bg_img=tk.getImage(MyFrame.class.getClassLoader().getResource("image/bg2.jpg"));
g.drawImage(bg_img, 0, bg_y, WIDTH, HEIGHT, null);
g.drawImage(bg_img, 0, -HEIGHT+bg_y, WIDTH, HEIGHT, null);
//判断bg_y的值是否超过窗体的高度
if(bg_y&HEIGHT)
Image my_img=tk.getImage(MyFrame.class.getClassLoader().getResource("image/my_img.jpg"));
g.drawImage(my_img, my_x, my_y, 55, 60, null);
//创建随机对象
Random rd=new Random();
if(rd.nextInt(10)==5)
//创建敌机
Person person=new Person(rd.nextInt(850), 45, 32, 58, 100, 100, "enemy1.jpg", 15);
personAll.add(person);
for (int i = 0; i & personAll.size(); i++) {
Person person=personAll.get(i);
if(person.isLive)
person.drawPerson(g);
personAll.remove(person);
//绘画爆炸
for (int i = 0; i & explodeAll.size(); i++) {
Explode e=explodeAll.get(i);
//判断是否是活字弹
if(e.isLive)
e.drawExplode(g);
explodeAll.remove(e);
//绘画子弹
for (int i = 0; i & bulletAll.size(); i++) {
Bullet bullet=bulletAll.get(i);
//判断是否是活子弹
if(bullet.isLive)
bullet.drawBullet(g);
bulletAll.remove(bullet);
this.setTitle("雷电
分数:"+score);
public void move()
MyFrame.my_x-=20;
MyFrame.my_x+=20;
MyFrame.my_y+=20;
MyFrame.my_y-=20;
//开火方法
public void Fire()
Bullet bullet=new Bullet();
bullet.x=my_x+22;
bullet.y=my_y+30;
bullet.img="bullet.jpg";
bullet.speed=40;
bullet.width=20;
bullet.height=20;
bulletAll.add(bullet);
Image img=
public void update(Graphics g) {
if(img==null)
img=this.createImage(WIDTH, HEIGHT);
//利用img创建虚拟画笔
Graphics gb=img.getGraphics();
//调用paint方法
paint(gb);
//利用真实的画笔g来画图片
g.drawImage(img, 0,0,WIDTH,HEIGHT,null);
public static void main(String[] args) {
new MyFrame();
//内部类,线程类,用来刷新当前窗体S
class MyThread extends Thread
public void run() {
while(true)
repaint();
//每时每刻都判断是否要移动飞机
//让子弹前进,速度要比玩家速度快很多
for (int i = 0; i & bulletAll.size(); i++) {
Bullet bullet=bulletAll.get(i);
bullet.y-=bullet.
Thread.sleep(65);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
//这个类的作用是关闭窗体
class MyWindowClose extends WindowAdapter
public void windowClosing(WindowEvent e) {
System.exit(0);
class MyKeyDown extends KeyAdapter
public void keyPressed(KeyEvent e) {
switch (e.getKeyCode()) {
case KeyEvent.VK_A:
MyFrame.a=
case KeyEvent.VK_S:
MyFrame.s=
case KeyEvent.VK_D:
MyFrame.d=
case KeyEvent.VK_W:
MyFrame.w=
case KeyEvent.VK_J:
MyFrame.j=
public void keyReleased(KeyEvent e) {
switch (e.getKeyCode()) {
case KeyEvent.VK_A:
MyFrame.a=
case KeyEvent.VK_S:
MyFrame.s=
case KeyEvent.VK_D:
MyFrame.d=
case KeyEvent.VK_W:
MyFrame.w=
case KeyEvent.VK_J:
MyFrame.j=
Person.java&~&3KB&&&&
package com.ruxia.
import java.awt.G
import java.awt.I
import java.awt.R
import java.awt.T
import javax.tools.T
public class Person {
//敌机坐标
private int x,y;
private int width,
public int getX() {
public void setX(int x) {
public int getY() {
public void setY(int y) {
public int getWidth() {
public void setWidth(int width) {
this.width =
public int getHeight() {
public void setHeight(int height) {
this.height =
public int getHp() {
public void setHp(int hp) {
public int getKill() {
public void setKill(int kill) {
this.kill =
public String getImgurl() {
public void setImgurl(String imgurl) {
this.imgurl =
public int getSpeed() {
public void setSpeed(int speed) {
this.speed =
public Person(int x, int y, int width, int height, int hp, int kill,
String imgurl, int speed) {
this.width =
this.height =
this.kill =
this.imgurl =
this.speed =
//定义图片路径
//是否存活
boolean isLive=
public void drawPerson(Graphics g)
//定义系统工具类
Toolkit tk=Toolkit.getDefaultToolkit();
//创建图片对象
Image img=tk.getImage(Person.class.getClassLoader().getResource("image/"+imgurl));
g.drawImage(img,x,y,width,height,null);
public void move()
if(y&=MyFrame.HEIGHT)
//捡查子弹是否出屏幕
for (int i = 0; i & MyFrame.bulletAll.size(); i++) {
if(MyFrame.bulletAll.get(i).y&0)
MyFrame.bulletAll.get(i).isLive=
this.hitPerson();
this.hitBullet();
//反回当前敌机的矩形
public Rectangle getPersonRectangle()
return new Rectangle(x,y,width,height);
//判断相撞
public void hitPerson()
//得到敌机矩形
Rectangle personRec=this.getPersonRectangle();
//得到主机矩形
Rectangle myRec=new Rectangle(MyFrame.my_x,MyFrame.my_y,55,60);
if(myRec.intersects(personRec)==true)
this.isLive=
//产生爆炸效果
Explode e=new Explode(x,y);
//将e放入爆炸效果集合
MyFrame.explodeAll.add(e);
//判断和玩家子弹的相撞
public void hitBullet()
//得到敌机矩形
Rectangle personRec=this.getPersonRectangle();
//得到子弹的矩形
for (int i = 0; i & MyFrame.bulletAll.size(); i++) {
Rectangle bulletRec=new Rectangle(MyFrame.bulletAll.get(i).x,MyFrame.bulletAll.get(i).y,20,20);
if(personRec.intersects(bulletRec)==true)
MyFrame.score+=10;
this.isLive=
//产生爆炸效果
Explode e=new Explode(x,y);
//将e放入爆炸效果集合
MyFrame.explodeAll.add(e);
game.zip&~&1MB&&&&
(3502)&&&&
开源中国-程序员在线工具:
下载后代码不能运行,修改image的路径后也不能运行。
2楼:圣洁之子 发表于
怎么主战飞机不能移动?
3楼:好大一条鱼 发表于
全是代码, 怎么不来个截图?
4楼:钟佳宏 发表于
Explode& 这个类的index忘记 递加了&&& 爆炸一直都是第一张图片 也不会消失
5楼:Qulc 发表于
全是图片绘制的
6楼:Qulc 发表于
还有个mysql-jdbc
7楼:贾婷Juno 发表于
太糙了。。。
8楼:james12121 发表于
验证可以运行,确实有点粗糙,不过意义在于学习,而不是玩。顶一个
9楼:appleat 发表于
10楼:轮回今生 发表于
11楼:回首_蛋疼依旧 发表于
我晕。。。
12楼:回首_蛋疼依旧 发表于
我晕。。。
13楼:回首_蛋疼依旧 发表于
我晕。。。
14楼:期待丶过了头 发表于
能玩&& 就是看的眼晕。。& 学习学习
15楼:小人 发表于
引用来自“james12121”的评论验证可以运行,确实有点粗糙,不过意义在于学习,而不是玩。顶一个你好请问怎么执行啊,我是初学者、谢谢
16楼:james12121 发表于
引用来自“小人”的评论引用来自“james12121”的评论验证可以运行,确实有点粗糙,不过意义在于学习,而不是玩。顶一个你好请问怎么执行啊,我是初学者、谢谢。。。在Eclipse里面导入就可以直接运行啊。。
开源从代码分享开始
宋勇野的其它代码人气:165571
访问用户量:77
笔记经验:410
总积分:511
级别:普通会员
搜索本笔记
ta的交流分类
ta的全部笔记
浏览(4485)|(0)
&&交流分类:|笔记分类:
本游戏使用的是html5的canvas,运行游戏需要浏览器支持html5。
本篇文章详细讲解如何用html5来开发一款射击游戏,雷电可以说是射击游戏中的经典,下面就来模仿一下。
先看一下游戏截图
游戏开发,需要用到开源库件:LegendForHtml5Programming。
LegendForHtml5Programming1.1下载地址:
LegendForHtml5Programming库件制作过程,以及如何在游戏中进行配置,请看下面链接
游戏预计用到下面几个文件
index.html
js文件夹|---Main.js&
& & & |---Plain.js//飞机& & & |---Bullet.js//子弹& & & |---Global.js//共通
images文件夹|--图片 我简单说一下制作过程,源代码在最下面
首先建立index.html文件,
java代码:
[html] view plaincopyprint?
&!DOCTYPE html&
&meta http-equiv=&Content-Type& content=&text/ charset=utf-8&&
&title&弹幕&/title&
&meta name=&viewport& content=&width=480,initial-scale=0.5, minimum-scale=0.5, maximum-scale=1.0,user-scalable=no& /&
&meta name=&viewport& content=&width=480,initial-scale=0.6& /&
&script type=&text/javascript& src=&../legend/legend.js&&&/script&
&script type=&text/javascript& src=&./js/Global.js&&&/script&
&script type=&text/javascript& src=&./js/Bullet.js&&&/script&
&script type=&text/javascript& src=&./js/Plain.js&&&/script&
&script type=&text/javascript& src=&./js/Main.js&&&/script&
&div id=&mylegend&&loading……&/div&
打开Main.js
在里面添加代码,先将图片全部读取,并显示进度条
以及,将一些可能会用到的变量添加进去
java代码:
[javascript] view plaincopyprint?
//设定游戏速度,屏幕大小,回调函数
init(50,&mylegend&,480,800,main);
/**层变量*/
//显示进度条所用层
var loadingL
//游戏最底层
/**int变量*/
//读取图片位置
var loadIndex = 0;
var frames = 0;
//BOOS START
var boosstart =
//GAME OVER
var gameover =
//GAME CLEAR
var gameclear =
var point = 0;
/**对象变量*/
var pointT
/**数组变量*/
//图片path数组
var imgData = new Array();
//读取完的图片数组
var imglist = {};
//子弹数组
var barrage = new Array();
//子弹速度数组
var barrageSpeed = [5,10];
//储存所有敌人飞机的数组
var enemys = new Array();
function main(){
//准备读取图片
imgData.push({name:&back&,path:&./images/back.jpg&});
imgData.push({name:&enemy&,path:&./images/e.png&});
imgData.push({name:&player&,path:&./images/player.png&});
imgData.push({name:&boss&,path:&./images/boss.png&});
imgData.push({name:&ctrl&,path:&./images/ctrl.png&});
imgData.push({name:&item1&,path:&./images/1.png&});
//实例化进度条层
loadingLayer = new LSprite();
loadingLayer.graphics.drawRect(1,&black&,[50, 200, 200, 20],true,&#ffffff&);
addChild(loadingLayer);
//开始读取图片
loadImage();
function loadImage(){
//图片全部读取完成,开始初始化游戏
if(loadIndex &= imgData.length){
removeChild(loadingLayer);
legendLoadOver();
gameInit();
//开始读取图片
loader = new LLoader();
loader.PLETE,loadComplete);
loader.load(imgData[loadIndex].path,&bitmapData&);
function loadComplete(event){
//进度条显示
loadingLayer.graphics.clear();
loadingLayer.graphics.drawRect(1,&black&,[50, 200, 200, 20],true,&#ffffff&);
loadingLayer.graphics.drawRect(1,&black&,[50, 203, 200*(loadIndex/imgData.length), 14],true,&#000000&);
//储存图片数据
imglist[imgData[loadIndex].name] = loader.
//读取下一张图片
loadIndex++;
loadImage();
现在,所用到的图片已经全部都加载完毕,先添加背景,显示一张图片
&用legend库件显示图片非常简单
java代码:
[javascript] view plaincopyprint?
function gameInit(event){
//游戏底层实例化
backLayer = new LSprite();
addChild(backLayer);
//添加游戏背景
bitmapdata = new LBitmapData(imglist[&back&]);
bitmap = new LBitmap(bitmapdata);
backLayer.addChild(bitmap);}
射击游戏,子弹是亮点,如何添加多种子弹是游戏的关键
要使子弹有变化,必须要设定相应的角度,加速度,等多种变量
下面为了实现这些变化,我们来建立一个子弹类
java代码:
[javascript] view plaincopyprint?
function Bullet(belong,x,y,angle,xspeed,yspeed,aspeed,speed){
base(this,LSprite,[]);
var self =
//子弹所属
self.belong =
//出现位置
self.angle =
//移动速度
self.speed =
//xy轴速度
self.xspeed =
self.yspeed =
//旋转角度加成
self.aspeed =
//子弹图片
var bitmapdata,
bitmapdata = new LBitmapData(imglist[&item1&]);
bitmap = new LBitmap(bitmapdata);
self.bitmap =
self.addChild(bitmap);
然后,在子弹移动过程中,根据这些变量来实现多种变换
在共通类中,加入一个子弹数组,用来区分各种子弹
java代码:
[javascript] view plaincopyprint?
* 子弹类型数组
* 【开始角度,增加角度,子弹速度,角度加速度,子弹总数,发动频率,枪口旋转】
Global.bulletList = new Array(
{startAngle:0,angle:20,speed:5,aspeed:0,count:1,shootspeed:10,sspeed:0},//1发
/** * 子弹类型数组 * 【开始角度,增加角度,子弹速度,角度加速度,子弹总数,发动频率,枪口旋转】 * */ Global.bulletList = new Array( {startAngle:0,angle:20,speed:5,aspeed:0,count:1,shootspeed:10,sspeed:0},//1发 );游戏最基本的子弹,当然就是每次发一个子弹
在共通类里建一个发射子弹的函数
[javascript] view plaincopyprint?
* 发射子弹
* @param 飞机
Global.setBullet = function(plainObject){
var i,j,obj,xspeed,yspeed,
//获取子弹属性
var bullet = Global.bulletList[0];
//开始发射
for(i=0;i&bullet.i++){
//发射角度
kaku = i*bullet.angle + bullet.startA
//子弹xy轴速度
xspeed = bullet.speed*Math.sin(kaku * Math.PI / 180);
yspeed = barrageSpeed[0]*Math.cos(kaku * Math.PI / 180);
//子弹实例化
obj = new Bullet(0,210,300,kaku,xspeed,yspeed,bullet.aspeed,bullet.speed);
backLayer.addChild(obj);
barrage.push(obj);
/** * 发射子弹 * @param 飞机 * */ Global.setBullet = function(plainObject){ var i,j,obj,xspeed,yspeed, //获取子弹属性 var bullet = Global.bulletList[0]; //开始发射 for(i=0;i&bullet.i++){ //发射角度 kaku = i*bullet.angle + bullet.startA //子弹xy轴速度 xspeed = bullet.speed*Math.sin(kaku * Math.PI / 180); yspeed = barrageSpeed[0]*Math.cos(kaku * Math.PI / 180); //子弹实例化 obj = new Bullet(0,210,300,kaku,xspeed,yspeed,bullet.aspeed,bullet.speed); //显示 backLayer.addChild(obj); barrage.push(obj); } };这里,最终需要根据发射的飞机不同而不同,所以我加入了参数飞机
那现在建立飞机类,如下
[javascript] view plaincopyprint?
function Plain(name,belong,x,y,bullets){
base(this,LSprite,[]);
var self =
//飞机名称
self.name =
//飞机位置
//飞机所属
self.belong =
//子弹数组
self.bullets =
//初始子弹
self.bullet = self.bullets[Math.floor(Math.random()*self.bullets.length)];
self.shootspeed = Global.bulletList[self.bullet].
//枪口旋转角度
self.sspeed = 0;
//射击频率控制
self.shootctrl = 0;
//获取飞机属性
self.list = Global.getPlainStatus(self);
//飞机图片
self.bitmap = self.list[0];
self.addChild(self.bitmap);
//枪口位置
self.shootx = self.list[1];
self.shooty = self.list[2];
//移动速度
self.speed = self.list[3];
self.hp = self.list[4];
//移动方向
self.move = [0,0];
//发射子弹数
self.shootcount = 0;
//是否发射子弹
self.canshoot =
if(name==&player&)self.canshoot =
Plain.prototype.onframe = function (){
var self =
self.x += self.move[0]*self.
self.y += self.move[1]*self.
switch (self.name){
case &player&:
//自机移动位置限制
if(self.x & 0)self.x = 0;
else if(self.x + self.bitmap.getWidth() & LGlobal.width)self.x = LGlobal.width-self.bitmap.getWidth();
if(self.y & 0)self.y = 0;
else if(self.y + self.bitmap.getHeight() & LGlobal.height)self.y = LGlobal.height-self.bitmap.getHeight();
case &boss&:
//敌机BOSS移动
if(self.y & 0){
self.y = 0;
self.move[1] = 1;
}else if(self.y + self.bitmap.getHeight() & LGlobal.height){
self.y = LGlobal.height-self.bitmap.getHeight();
self.move[1] = -1;
//碰撞检测
self.hitTest();
case &enemy&:
//碰撞检测
self.hitTest();
if(self.canshoot)self.shoot();
* 碰撞检测
Plain.prototype.hitTest = function (){
var self =
var disx,disy,sw,
sw = (self.bitmap.getWidth() + self.bitmap.getHeight())/4;
ew = (player.bitmap.getWidth() + player.bitmap.getHeight())/4;
disx = self.x+sw - (player.x + ew);
disy = self.y+self.bitmap.getHeight()/2 - (player.y + player.bitmap.getHeight()/2);
if(disx*disx + disy*disy & (sw+ew)*(sw+ew)){
player.visible =
gameover =
Plain.prototype.shoot = function (){
var self =
if(self.shootctrl++ & self.shootspeed)
self.shootctrl = 0;
if(self.name == &boss&){
if(self.shootcount++ % 20 & 5)
if(self.shootcount++ % 10 & 5)
Global.setBullet(self);
if(self.name == &boss&){
if(self.shootcount % 20 & 5)
if(self.shootcount % 10 & 5)
if(self.bullets.length &= 1)
self.bullet = self.bullets[Math.floor(Math.random()*self.bullets.length)];
self.shootspeed = Global.bulletList[self.bullet].
代码已经加入了详细的注释,不难理解吧
完善子弹类如下
java代码:
[javascript] view plaincopyprint?
function Bullet(belong,x,y,angle,xspeed,yspeed,aspeed,speed){
base(this,LSprite,[]);
var self =
//子弹所属
self.belong =
//出现位置
self.angle =
//移动速度
self.speed =
//xy轴速度
self.xspeed =
self.yspeed =
//旋转角度加成
self.aspeed =
//子弹图片
var bitmapdata,
bitmapdata = new LBitmapData(imglist[&item1&]);
bitmap = new LBitmap(bitmapdata);
self.bitmap =
self.addChild(bitmap);
* @param 子弹序号
Bullet.prototype.onframe = function (index){
var self =
//子弹移动
self.x += self.
self.y += self.
//子弹角度变更
if(self.aspeed != 0){
self.angle += self.
//子弹角度变更后,重新计算xy轴速度
self.xspeed = self.speed*Math.sin(self.angle * Math.PI / 180);
self.yspeed = self.speed*Math.cos(self.angle * Math.PI / 180);
//子弹位置检测
if(self.x & 0 || self.x & LGlobal.width || self.y & 0 || self.y & LGlobal.height){
//从屏幕移除
backLayer.removeChild(self);
//从子弹数组移除
barrage.splice(index,1);
self.hitTest(index);
* 子弹碰撞检测
* @param 子弹序号
Bullet.prototype.hitTest = function (index){
var self =
var disx,disy,sw,ew,obj,i;
if(self.belong == player.belong){
//自机子弹
for(i=0;i&enemys.i++){
obj = enemys[i];
sw = self.bitmap.getWidth()/2;
ew = obj.bitmap.getWidth()/2;
disx = self.x+sw - (obj.x + ew);
disy = self.y+self.bitmap.getHeight()/2 - (obj.y + obj.bitmap.getHeight()/2);
//距离检测
if(disx*disx + disy*disy & ew*ew){
if(obj.hp == 0){
point += 1;
pointText.text =
//从屏幕移除
backLayer.removeChild(obj);
//从敌机数组移除
enemys.splice(i,1);
if(obj.name == &boss&){
gameclear =
//从屏幕移除
backLayer.removeChild(self);
//从子弹数组移除
barrage.splice(index,1);
//敌机子弹
sw = self.bitmap.getWidth()/2;
ew = obj.bitmap.getWidth()/2;
disx = self.x+sw - (obj.x + ew);
disy = self.y+self.bitmap.getHeight()/2 - (obj.y + obj.bitmap.getHeight()/2);
//距离检测
if(disx*disx + disy*disy & ew*ew - 10){
obj.visible =
gameover =
//从屏幕移除
backLayer.removeChild(self);
//从子弹数组移除
barrage.splice(index,1);
子弹发射函数,修改如下
java代码:
[javascript] view plaincopyprint?
* 发射子弹
* @param 飞机
Global.setBullet = function(plainObject){
var i,j,obj,xspeed,yspeed,
//获取子弹属性
var bullet = Global.bulletList[plainObject.bullet];
//设定枪口旋转
plainObject.sspeed += bullet.
//开始发射
for(i=0;i&bullet.i++){
//发射角度
kaku = i*bullet.angle + bullet.startAngle + plainObject.
//子弹xy轴速度
xspeed = bullet.speed*Math.sin(kaku * Math.PI / 180);
yspeed = barrageSpeed[0]*Math.cos(kaku * Math.PI / 180);
//子弹实例化
obj = new Bullet(plainObject.belong,plainObject.x+plainObject.shootx,plainObject.y+plainObject.shooty,kaku,xspeed,yspeed,bullet.aspeed,bullet.speed);
backLayer.addChild(obj);
barrage.push(obj);
在Main文件里添加循环
java代码:
[html] view plaincopyprint?
function onframe(){
//循环子弹
for(i=0;i&barrage.i++){
barrage[i].onframe(i);
//循环敌机
for(i=0;i&enemys.i++){
enemys[i].onframe();
现在,我只需要添加飞机,就可以发射子弹了
java代码:
[javascript] view plaincopyprint?
plain = new Plain(&enemy&,1,200,300,[0]);
&&&&&&&&&&
修改,子弹的相应参数,如下
java代码:
[javascript] view plaincopyprint?
* 子弹类型数组
* 【开始角度,增加角度,子弹速度,角度加速度,子弹总数,发动频率,枪口旋转】
Global.bulletList = new Array(
{startAngle:0,angle:20,speed:5,aspeed:0,count:1,shootspeed:10,sspeed:0},//1发
{startAngle:-20,angle:20,speed:5,aspeed:0,count:3,shootspeed:10,sspeed:0},//3发
{startAngle:0,angle:20,speed:5,aspeed:0,count:1,shootspeed:1,sspeed:20},//1发旋转
{startAngle:0,angle:20,speed:5,aspeed:0,count:18,shootspeed:3,sspeed:0},//环发
{startAngle:0,angle:20,speed:5,aspeed:1,count:18,shootspeed:3,sspeed:0},//环发旋转
{startAngle:180,angle:20,speed:5,aspeed:0,count:1,shootspeed:5,sspeed:0},//1发 up
{startAngle:160,angle:20,speed:5,aspeed:0,count:3,shootspeed:5,sspeed:0}//3发 up
效果分别为
最后附上所有源码下载
转自CSDN:
相关笔记推荐
精品视频课程推荐
创建规范的XML文档,DTD的作用,并且可以根据要求创建私用的DTD,通过JavaScript解析XML DOM
本视频课程是北京Java私塾原创精品书籍《研磨设计模式》一书的配套学习视频,由《研磨设计模式》的第一作者CC录制
课程目标:全面、系统的掌握GoF设计模式的知识,达到可以在实际项目开发中运用的能力
技术要点:如何实现可配置、如何实现缓存以及缓存的管理、如何实现用缓存来控制多实例的创建、如何实现参数化工厂、 如何实现可扩展工厂、如何实现原型管理器、如何实现Java的静态代理和动态代理、如何实现多线程处理队列请求、 如何实现命令的参数化配置、可撤销的操作、宏命令、队列请求和日志请求、如何实现翻页迭代、如何检测环状结构、 如何实现通用的增删改查、如何模拟工作流来处理流程、如何实现简单又通用的XML读取、如何实现模拟AOP的功能......
本课程专注于数据结构和算法的内容,使用Java来进行代码示例,不空洞的讲解概念和理论,重点放在代码的实现和示例上。
从零开始、全面系统、成体系的讲解数据结构和基本算法,循序渐进的讲述构建软件系统所常见的数据结构和算法。
从零到精通Spring3的开发知识;IoC/DI的思想、IoC/DI的运行流程、IoC/DI的开发指导、AOP的思想、AOP的运行流程、AOP应用的设计、Spring对JDBC和Hibernate的支持、Spring的事务、SSH的集成应用
学习在java项目中使用log4j、jdk自带的日志框架和slf4j
浏览(4485)|(0)
&&交流分类:|笔记分类:
版权所有 Copyright(C) 私塾在线学习网

我要回帖

更多关于 java雷电 的文章

 

随机推荐