📄 footballclass.java
字号:
/*
* FootballClass.java
*
* Created on 2007年6月3日, 下午10:13
*
* To change this template, choose Tools | Template Manager
* and open the template in the editor.
*/
package hello;
import javax.microedition.lcdui.Graphics;
import javax.microedition.lcdui.Image;
import java.io.IOException;
import javax.microedition.lcdui.game.Sprite;
/**
*
* @author FXB
*/
//初步考虑,每200微妙刷新一次球的图像
public class FootballClass {
private int TimeDelay;
private int TimeN = 0;
//X方向的最大速度
private static final float MAXX = 3;
//地面的摩擦阻力
private static final float GROUNDFORCE = 0.3f;
//碰撞方向变化的精度
private static final float MINX = 0.5f;
private Sprite Football; //足球精灵
private float Football_X; //足球当前X坐标
private float Football_Y; //足球当前Y坐标
private float PreFootball_X; //足球当前帧的前一帧的X坐标
private float PreFootball_Y; //足球当前帧的前一帧的Y坐标
private float NextFootball_X; //足球下一帧的X坐标
private float NextFootball_Y; //足球下一帧的Y坐标
private float Football_R; //足球的半径
private boolean Direction_Y = false; //当前足球的竖直运动方向,ture为向上,false为向下
private boolean Direction_X = false; //当前足球的水平运动方向,ture为向左,false为向右
private float Football_distance_X = 0.5f; //前后两帧X方向的距离,大于0,则是向右运动,小于0,则是向左运动
private double Football_distanceR_Y ; //前两帧的距离和后两帧的距离在Y方向上之差
private double Football_diatanceR_Y_;
private float Resistance_air; //空气阻力造成的距离差
private float Force = 0; //人头顶足球的力度,5为无能量损失碰撞,789为增加能量,123为减能量。
private float Football_H ; //足球当前的高度
private int IsStrike = 0; //碰撞类型标记,0为无碰撞,1为左侧碰撞,2为右侧碰撞,3为地板碰撞,4为头部碰撞
public boolean state = true ; //用来标记当前游戏的状态,如果state变为false,则表明球触到地面了,游戏应该结束
private FootballGameCanvas footballGameGanvas;
/** Creates a new instance of FootballClass */
public FootballClass(Sprite Football, float Football_X, float Football_Y ,
double Football_ditanceR_Y, float Resistance_air,int TimeDelay,FootballGameCanvas footballGameGanvas) {
this.TimeDelay = TimeDelay;
this.footballGameGanvas = footballGameGanvas;
// this.TimeN = 0;
this.Football = Football; //初始化足球精灵
this.Football_X = Football_X; //初始化足球的当前X坐标
this.Football_Y = Football_Y; //初始化足球的当前Y坐标
this.Football_distanceR_Y = Football_ditanceR_Y; //初始化前两帧的距离和后两帧的距离在Y方向上之差,重力越大,此值越大
this.Football_diatanceR_Y_ = this.Football_distanceR_Y;
this.PreFootball_X = Football_X; //初始化足球的前一点X坐标
this.PreFootball_Y = Football_Y; //初时化足球前一点坐标的Y坐标
this.Resistance_air = Resistance_air; //空气阻力造成的距离差
}
//计算下一点的X坐标
public void cmpNext_X(){
if(this.Football_distance_X < -MAXX){
this.Football_distance_X = -MAXX;
}else
if(this.Football_distance_X > MAXX){
this.Football_distance_X = MAXX;
}
this.NextFootball_X = this.Football_X + this.Football_distance_X;
}
//确定当前运动的方向,分两个方向,向上or向下
public void isDirection_Y(){
if(this.Football_Y <= this.PreFootball_Y){
this.Direction_Y = true;
}else
this.Direction_Y = false;
}
//计算下一点的Y坐标
public void cmpNext_Y(){
this.isDirection_Y();
if(this.Direction_Y){
this.NextFootball_Y = 2*this.Football_Y - this.PreFootball_Y + (float)this.Football_distanceR_Y + this.Resistance_air;
}
else{
this.NextFootball_Y = 2*this.Football_Y - this.PreFootball_Y + (float)this.Football_distanceR_Y - this.Resistance_air;
}
}
//如果检测到碰撞,并且类项为0,无碰撞,则调用这个函数
public boolean strikeNo(){
this.cmpNext_X();
this.cmpNext_Y();
return true;
}
//显示足球当前帧 ,并且对数据进行更新,
public void displayFootball(){
if(this.NextFootball_Y>this.footballGameGanvas.getmyHeight()-5-this.Football.getHeight()/2){
// if(this.NextFootball_X>this.footballGameGanvas.getmyWidth()-10-this.Football.getWidth()/2){
// this.Football.setRefPixelPosition((int)this.footballGameGanvas.getmyWidth()-10-this.Football.getWidth()/2,
// (int)this.NextFootball_Y);
// }else if(this.NextFootball_X<10+this.Football.getWidth()/2){
// this.Football.setRefPixelPosition((int)(10+this.Football.getWidth()/2),
// (int)this.NextFootball_Y);
// }else
// this.Football.setRefPixelPosition((int)this.NextFootball_X,(int)this.NextFootball_Y);
//
// }else{
// if(this.NextFootball_X>this.footballGameGanvas.getmyWidth()-10-(this.Football.getWidth()/2)){
// this.NextFootball_X = this.PreFootball_X;
// this.NextFootball_Y = this.PreFootball_Y;
// System.out.println(this.footballGameGanvas.getmyWidth()-10-(this.Football.getWidth()/2));
// System.out.println(this.NextFootball_X);
// System.out.println("ssssssssssssssssssss");
// this.Football.setRefPixelPosition((int)this.footballGameGanvas.getmyWidth()-10-this.Football.getWidth()/2,
// (int)this.footballGameGanvas.getmyHeight()-5-this.Football.getHeight()/2);
// }else {
// if(this.NextFootball_X<10+this.Football.getWidth()/2){
//
// this.NextFootball_X = this.PreFootball_X;
// this.NextFootball_Y = this.PreFootball_Y;
// System.out.println("tttttttttttttttttt");
// this.Football.setRefPixelPosition((int)(10+this.Football.getWidth()/2),
// (int)this.footballGameGanvas.getmyHeight()-5-this.Football.getHeight()/2);
// }else{
this.Football.setRefPixelPosition((int)this.NextFootball_X,
(int)this.footballGameGanvas.getmyHeight()-3-this.Football.getHeight()/2);
// System.out.println("vvvvvvvvvvvvvvvvvvvv");
//// }
// }
}else
this.Football.setRefPixelPosition((int)this.NextFootball_X,(int)this.NextFootball_Y);
// this.Football.setRefPixelPosition((int)this.NextFootball_X,
// (int)this.NextFootball_Y);
this.updata_XY();
}
//更新XY的坐标点各值,包括当前,以前和以后的坐标
// private int TimeM=0;
public void updata_XY(){
//使球旋转起来
if(this.TimeN*this.TimeDelay > -(40/this.Football_distance_X) && this.Football_distance_X < 0){
this.Football.nextFrame();
this.TimeN = 0;
}else if(this.TimeN*this.TimeDelay > 40/this.Football_distance_X && this.Football_distance_X > 0){
this.Football.prevFrame();
this.TimeN = 0;
}
this.TimeN++;
this.PreFootball_X = this.Football_X;
this.PreFootball_Y = this.Football_Y;
this.Football_X = this.NextFootball_X;
this.Football_Y = this.NextFootball_Y;
}
//根据传入的精灵和传入精灵的类项来检测碰撞,并更新IsStrike值
//碰撞类型标记,0为与天花板碰撞,1为左侧碰撞,2为右侧碰撞,3为地板碰撞,4为头部碰撞
public boolean isStrike(Sprite SpriteElse,int type){
if(this.Football.collidesWith(SpriteElse , true )){
switch(type){
case 0:
this.strikeNext_Zero();
System.out.println("天花板碰撞");
break;
case 1:
this.strikeNext_One();
System.out.println("左侧碰撞");
break;
case 2:
this.strikeNext_Two();
System.out.println("右侧碰撞");
break;
case 3:
//当无y方向的运动时,足球的x方向运动也将停止
if( (this.Football_Y-this.PreFootball_Y) >=0 &&
(this.Football_Y-this.PreFootball_Y)<=this.Football_distanceR_Y*2){
this.Football_distance_X = 0;
this.Football_distanceR_Y = 0;
this.state = false; //球掉落在地上,引发游戏over
}else
{
// System.out.println(this.Football_Y-this.PreFootball_Y);
// System.out.println(this.Football_distanceR_Y-this.Resistance_air);
this.strikeNext_Three();
System.out.println("地板碰撞");
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -