📄 tankbullet.java
字号:
/**
* <p>Title: Transpanzer</p>
* <p>Description:
* You cannot remove this copyright and notice.
* You cannot use this file any part without the express permission of the author.
* All Rights Reserved</p>
* @author Jjyo
* @email jjyo@163.com
* @version 1.0.0
*/
public class TankBullet extends FSprite{
public GameManage gm;
private int xSpeed;
private int ySpeed;
private int bulletType;
private int tmpDx;
private int tmpDy;
private int r;
private int arc;
private int arcos;
private int index;
private int frame[]={0,1,2,3,4};
private boolean change;
private Rect rect1=new Rect();
private Rect rect2=new Rect();
//model
public TankBullet(GameManage gm){
System.out.println("TankBullet Sucessful...");
this.gm=gm;
isHidden=true;
rect1.dx=8;
rect1.dy=8;
rect2.dx=16;
rect2.dy=16;
}
public void initBullet(int x,int y,int xSpeed,int ySpeed,int bulletType){
this.x=x;
this.y=y;
this.xSpeed=xSpeed;
this.ySpeed=ySpeed;
this.bulletType=bulletType;
isHidden=false;
frameCnt=0;
tmpDx=x;
tmpDy=y;
this.arc=xSpeed;
this.arcos=ySpeed;
r=15;
if(System.currentTimeMillis()%2==0){
change=true;
}
}
public void action(){
if(!isHidden){
if(x>TankGameCanvas.width-32||x<16||y<16||y>TankGameCanvas.height-32)
{
isHidden=true;
return;
}
switch(bulletType){
/**
* ----------------------------------------------------
*/
case TankSprite.BULLET_DEFANUL:
pow=4;
if(xSpeed<0){
frameCnt=0;
}else if(xSpeed>0){
frameCnt=6;
}else if(ySpeed<0){
frameCnt=12;
}
break;
/**
* -----------------------------------------------------
*/
case TankSprite.BULLET_HYPER:
pow=8;
if(xSpeed<0){
frameCnt=1;
}else if(xSpeed>0){
frameCnt=7;
}else if(ySpeed<0){
frameCnt=13;
}
break;
/**
* ----------------------------
*/
case TankSprite.BULLET_CRUCHER:
pow=16;
frameCnt++;
if(xSpeed<0){
if(frameCnt>=6)
frameCnt=2;
if(tmpDx==x)
frameCnt=2;
}
else if(xSpeed>0){
if(frameCnt>=12)
frameCnt=8;
if(tmpDx==x)
frameCnt=8;
}else{
if(frameCnt>=18)
frameCnt=14;
if(tmpDy==y)
frameCnt=14;
}
break;
/**
* ----------------------------------------------------
*/
case TankSprite.BULLET_TANE:
pow=2;
frameCnt=0;
if(x-tmpDx>72||x-tmpDx<-72){
isHidden=true;
gm.creatBombEffect(x-12, y-12, 0);
return;
}
break;
/**
* ---------------------------------------------------
*/
case TankSprite.BULLET_BOMB:
pow=24;
frameCnt=3;
if(x-tmpDx>50||x-tmpDx<-48||y-tmpDy>48||y-tmpDy<-32||x<0||x>TankGameCanvas.width||y<0||y>TankGameCanvas.height){
isHidden=true;
gm.creatBombEffect(x-16, y-16, 4);
return;
}
break;
/**
* ---------------------------------------------------
*/
case TankSprite.BULLET_GUN00:
case TankSprite.BULLET_GUN01:
case TankSprite.BULLET_GUN02:
case TankSprite.BULLET_GUN03:
case TankSprite.BULLET_GUN04:
pow=4;
if(xSpeed<0){
frameCnt=5;
if(tmpDx==x)
frameCnt=4;
}
else if(xSpeed>0){
frameCnt=12;
if(tmpDx==x)
frameCnt=11;
}
else if(ySpeed<0){
frameCnt=19;
if(tmpDy==y)
frameCnt=18;
}else{
frameCnt=26;
if(tmpDy==y)
frameCnt=25;
}
if(bulletType==TankSprite.BULLET_GUN00){
pow=2;
if(x-tmpDx>100||x-tmpDx<-100||y-tmpDy>100||y-tmpDy<-100||
x<0||x>TankGameCanvas.width||y<0||y>TankGameCanvas.height){
isHidden=true;
return;
}
}
break;
/**
* -------------------------------------------------
*/
case TankSprite.BULLET_GUN05:
pow=4;
if(xSpeed<0){
frameCnt=5;
}
else if(xSpeed>0){
frameCnt=12;
}
else if(ySpeed<0){
frameCnt=19;
}else{
frameCnt=26;
}
if(r==15){
switch(TankSprite.direction){
case TankSprite.left:
frameCnt=4;
r+=1;
break;
case TankSprite.right:
frameCnt=11;
r+=1;
break;
case TankSprite.up:
frameCnt=18;
r+=1;
break;
case TankSprite.down:
frameCnt=25;
r+=1;
break;
}
}
xSpeed=(int)(r*Math.cos(Math.toRadians(arc)));
ySpeed=(int)(r*Math.sin(Math.toRadians(arc)));
if(arc%180==0)
r+=2;
arc+=arcos;
if(arc>=360) //角度>360时复位
arc=0;
break;
case TankSprite.BULLET_GUN06:
pow=4;
if(xSpeed<0){
frameCnt=5;
}
else if(xSpeed>0){
frameCnt=12;
}
else if(ySpeed<0){
frameCnt=19;
}else{
frameCnt=26;
}
if(r==15){
switch(TankSprite.direction){
case TankSprite.left:
frameCnt=4;
r+=1;
break;
case TankSprite.right:
frameCnt=11;
r+=1;
break;
case TankSprite.up:
frameCnt=18;
r+=1;
break;
case TankSprite.down:
frameCnt=25;
r+=1;
break;
}
}
xSpeed=(int)((r+5)*Math.cos(Math.toRadians(arc)));
ySpeed=(int)((r+5)*Math.sin(Math.toRadians(arc)));
if(arc%180==0)
r+=2;
arc+=arcos;
if(arc>=360) //角度>360时复位
arc=0;
break;
case TankSprite.BULLET_GUN07:
pow=8;
if(xSpeed<0){
xSpeed-=1;
frameCnt=5;
if(tmpDx==x){
frameCnt=4;
}else{
if(timeCnt>=0&&timeCnt<5){
y+=4;
}else{
y-=4;
}
}
}
else if(xSpeed>0){
frameCnt=12;
xSpeed+=1;
if(tmpDx==x){
frameCnt=11;
}else{
if(timeCnt>=0&&timeCnt<5){
y+=4;
}else{
y-=4;
}
}
}
else if(ySpeed<0){
frameCnt=19;
ySpeed-=1;
if(tmpDy==y){
frameCnt=18;
}else{
if(timeCnt>=0&&timeCnt<5){
x+=4;
}else{
x-=4;
}
}
}else{
frameCnt=26;
ySpeed+=1;
if(tmpDy==y){
frameCnt=25;
}else{
if(timeCnt>=0&&timeCnt<5){
x+=4;
}else{
x-=4;
}
}
}
if(++timeCnt>10)
timeCnt=0;
break;
case TankSprite.BULLET_GUN08:
pow=16;
if(xSpeed<0){
xSpeed-=2;
nextFrame(5,6);
if(tmpDx==x){
frameCnt=4;
}else{
if(timeCnt>=0&&timeCnt<5){
y+=6;
}else{
y-=6;
}
}
}
else if(xSpeed>0){
nextFrame(5,13);
xSpeed+=2;
if(tmpDx==x){
frameCnt=11;
}else{
if(timeCnt>=0&&timeCnt<5){
y+=6;
}else{
y-=6;
}
}
}
else if(ySpeed<0){
nextFrame(5,20);
ySpeed-=2;
if(tmpDy==y){
frameCnt=18;
}else{
if(timeCnt>=0&&timeCnt<5){
x+=6;
}else{
x-=6;
}
}
}else{
nextFrame(5,27);
ySpeed+=2;
if(tmpDy==y){
frameCnt=25;
}else{
if(timeCnt>=0&&timeCnt<5){
x+=6;
}else{
x-=6;
}
}
}
if(++timeCnt>10)
timeCnt=0;
break;
}
x+=xSpeed;
y+=ySpeed;
checkTileCollision();
checkColisionCorps();
}
}
protected void nextFrame(int frameNum,int frameIndex){
if(index>=frameNum||index<0)
index=0;
frameCnt=frame[index]+frameIndex;
index++;
}
private void checkTileCollision() {
int i=0,j;
if(bulletType==TankSprite.BULLET_DEFANUL||bulletType==TankSprite.BULLET_HYPER||bulletType==TankSprite.BULLET_CRUCHER){
if(xSpeed<0){
rect1.x=this.x+Maps.x;
rect1.y=this.y+Maps.y+16;
}else if(xSpeed>0){
rect1.x=this.x+Maps.x+16;
rect1.y=this.y+Maps.y+16;
}else{
rect1.x=this.x+Maps.x+16;
rect1.y=this.y+Maps.y;
}
}else{
rect1.x=this.x+Maps.x;
rect1.y=this.y+Maps.y+4;
}
int yTile;
j = rect1.x / Maps.tileSize;
if(i<0||i>Maps.w)
isHidden=true;
yTile = rect1.y / Maps.tileSize;
rect2.x = j * 16;
rect2.y = yTile * 16;
if(yTile<0||yTile>Maps.h-1){
isHidden=true;
return;
}
//检测地图属性,作出相当的判断
if (((Maps.mapArray[yTile][j] >> 8) & 0x0f) == 0x0f) {
rect2.x = j * 16;
rect2.y = yTile * 16;
if (Rect.IntersectRect(rect1, rect2)) {
if(TankSprite.bulletType!=TankSprite.BULLET_GUN08)
isHidden=true;
creatBombEffect(x,y,bulletType);
}
}
if(bulletType!=TankSprite.BULLET_BOMB&&TankSprite.spriteState==TankSprite.KANE){
if ((Maps.mapArray[yTile][j] & 0x00ff) == 0x18) {
rect2.x = j * 16;
rect2.y = yTile * 16;
if (Rect.IntersectRect(rect1, rect2)) {
isHidden=true;
Maps.mapArray[yTile][j]=0x1d;
creatBombEffect(x,y,bulletType);
}
}
}
}
private void checkColisionCorps(){
if(xSpeed<0){
rect1.x=this.x;
rect1.y=this.y+16;
}else if(xSpeed>0){
rect1.x=this.x+16;
rect1.y=this.y+16;
}
for(int i=gm.lgr.corps.length-1;i>=0;i--){
if(!gm.lgr.corps[i].isHidden){
rect2.x=gm.lgr.corps[i].x;
rect2.y=gm.lgr.corps[i].y;
rect2.dx=16;
rect2.dy=16;
if(Rect.IntersectRect(rect1, rect2)){
isHidden=true;
creatBombEffect(x,y,bulletType);
}
}
}
}
//爆炸效果
private void creatBombEffect(int x,int y,int bulletType){
switch(bulletType){
case TankSprite.BULLET_DEFANUL:
case TankSprite.BULLET_HYPER:
case TankSprite.BULLET_CRUCHER:
gm.creatBombEffect(x-8, y-6, 0);
break;
case TankSprite.BULLET_TANE:
gm.creatBombEffect(x-16, y-12, 0);
break;
case TankSprite.BULLET_BOMB:
gm.creatBombEffect(x-14, y-14, 4);
break;
case TankSprite.BULLET_GUN00:
case TankSprite.BULLET_GUN01:
case TankSprite.BULLET_GUN02:
case TankSprite.BULLET_GUN03:
case TankSprite.BULLET_GUN04:
case TankSprite.BULLET_GUN05:
case TankSprite.BULLET_GUN06:
case TankSprite.BULLET_GUN07:
case TankSprite.BULLET_GUN08:
gm.creatBombEffect(x-14, y-14, 5);
break;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -