📄 ball.java
字号:
//import java.io.InputStream;
import javax.microedition.lcdui.*;
//import javax.microedition.media.Player;
public class ball
{
boolean leftUp=false;
boolean rightUp=false;
boolean leftDown=false;
boolean rightDown=false;
int whichBuffer=1;
int ballX=50;
int ballY=150;
int time=200;//特殊球的维持时间
static int ySpeed=0;
static int xSpeed=0;
static int which=1;//哪一种球//1:普通球 2:火焰球
Image ballImg=null;
myCanvas mc;
public ball(myCanvas mc)
{
this.mc=mc;
initRes() ;
}
public void initRes()
{
whichBuffer=which;
try
{
//InputStream is=getClass().getResourceAsStream(arg0);
ballImg=Image.createImage("/ball"+which+".png");
}
catch(Exception e)
{
System.out.println("ball图片错误");
e.printStackTrace();
}
}
public void paint(Graphics g)
{
if(whichBuffer!=which)
{
initRes();
}
g.setClip( ballX, ballY, ballImg.getWidth(), ballImg.getHeight());
g.drawImage(ballImg, ballX, ballY, 0);
}
public void move()
{
if(which==2&&time>0)
{
time--;
}
else if(time<=0)
{
time=200;
which=1;
}
ballY+=ySpeed;
ballX+=xSpeed;
if(ySpeed==0)
{
ySpeed=-1;
}
else if(xSpeed==0)
{
xSpeed=1;
}
if(ballY<mc.backGroundY+3)
{
ySpeed=-ySpeed;
ballY=mc.backGroundY+3;
ballY+=ySpeed;
ballX+=xSpeed;
}
if(ballX<mc.backGroundX+3||ballX>mc.backGroundX+mc.backGround.getWidth()-ballImg.getWidth()-6)
{
if(ballX<mc.backGroundX+3)
ballX=mc.backGroundX+3;
if(ballX>mc.backGroundX+mc.backGround.getWidth()-ballImg.getWidth()-6)
ballX=mc.backGroundX+mc.backGround.getWidth()-ballImg.getWidth()-6;
xSpeed=-xSpeed;
ballY+=ySpeed;
ballX+=xSpeed;
}
}
public void atk(brick Brick)
{
//判断哪一点受到撞击/////////////////
//左上===========
if(ballX>Brick.brickX&&ballX<Brick.brickX+Brick.brickW&ballY<Brick.brickY+Brick.brickH&&ballY>Brick.brickY)
{
leftUp=true;
}
//右上===============
if(ballX+ballImg.getWidth()>Brick.brickX&&ballX+ballImg.getWidth()<Brick.brickX+Brick.brickW&&ballY<Brick.brickY+Brick.brickH&&ballY>Brick.brickY)
{
rightUp=true;
}
//左下===========
if(ballX>Brick.brickX&&ballX<Brick.brickX+Brick.brickW&&ballY+ballImg.getHeight()<Brick.brickY+Brick.brickH&&ballY+ballImg.getHeight()>Brick.brickY)
{
leftDown=true;
}
//右下===============
if(ballX+ballImg.getWidth()>Brick.brickX&&ballX+ballImg.getWidth()<Brick.brickX+Brick.brickW&&ballY+ballImg.getHeight()<Brick.brickY+Brick.brickH&&ballY+ballImg.getHeight()>Brick.brickY)
{
rightDown=true;
}
if(which!=2)//变成火焰球后可穿透砖块
{
//判断哪一面受到撞击//////////////
//上==============
if(leftUp==true&&rightUp==true)
{
ySpeed=-ySpeed;
}
//右===========
if(leftDown==true&&leftUp==true)
{
xSpeed=-xSpeed;
}
//左===========
if(rightUp==true&&rightDown==true)
{
xSpeed=-xSpeed;
}
//下================
if(rightDown==true&&leftDown==true)
{
ySpeed=-ySpeed;
}
//左上点和右下点特殊碰撞处理===
if(rightDown==true&&leftUp==true)
{
ySpeed=-ySpeed;
xSpeed=-xSpeed--;
}
//右上点和左下点特殊碰撞处理===
else if(leftDown==true&&rightUp==true)
{
ySpeed=-ySpeed;
xSpeed=-xSpeed--;
}
//对于只有一点碰撞的处理///////////////////
//左上点===
if(leftUp==true&&leftDown==false&&rightUp==false&&rightDown==false)
{
if(ySpeed>0&&xSpeed<0)
{
xSpeed=-xSpeed;
}
else if(xSpeed>0&&ySpeed<0)
{
ySpeed=-ySpeed;
}
else
{
ySpeed=-ySpeed;
xSpeed=-xSpeed;
}
}
//左下点===
else if(leftUp==false&&leftDown==true&&rightUp==false&&rightDown==false)
{
if(xSpeed<0&&ySpeed<0)
{
xSpeed=-xSpeed;
}
else if(xSpeed>0&&ySpeed>0)
{
ySpeed=-ySpeed;
}
else
{
xSpeed=-xSpeed;
ySpeed=-ySpeed;
}
}
//右上点===
else if(leftUp==false&&leftDown==false&&rightUp==true&&rightDown==false)
{
if(xSpeed<0&&ySpeed<0)
{
ySpeed=-ySpeed;
}
else if(xSpeed>0&&ySpeed>0)
{
xSpeed=-xSpeed;
}
else
{
ySpeed=-ySpeed;
xSpeed=-xSpeed;
}
}
//右下点===
else if(leftUp==false&&leftDown==false&&rightUp==false&&rightDown==true)
{
if(xSpeed>0&&ySpeed<0)
{
xSpeed=-xSpeed;
}
else if(xSpeed<0&&ySpeed>0)
{
ySpeed=-ySpeed;
}
else
{
ySpeed=-ySpeed;
xSpeed=-xSpeed;
}
}
}
//以防卡在挡板里的BUG
for(;ballY+ballImg.getHeight()>mc.getHeight()-Brick.brickH+2&&ballY+ballImg.getHeight()<mc.getHeight()&&ballX+ballImg.getWidth()>Brick.brickX+2&&ballX<Brick.brickX+Brick.brickW&&Brick.brickY>mc.getHeight()-20;)
{
System.out.println("卡入挡板BUG处理循环启动");
ballY-=2;
}
//碰撞后立即移动一次,制造反弹加速效果和一定程度上避免卡死BUG======
if(rightDown==true||leftDown==true||rightUp==true||leftUp==true)
{
//对火焰球的穿透处理
if(which==2&&ballY>mc.backGroundY+mc.backGround.getHeight()-30)
{
ySpeed=-ySpeed;
}
//===========
ballY+=ySpeed;
ballX+=xSpeed;
Brick.hp--;
}
leftUp=false;
rightUp=false;
leftDown=false;
rightDown=false;
}
public void recycleRes()
{
mc=null;
ballImg=null;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -