?? 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; //足球當(dāng)前X坐標(biāo)
private float Football_Y; //足球當(dāng)前Y坐標(biāo)
private float PreFootball_X; //足球當(dāng)前幀的前一幀的X坐標(biāo)
private float PreFootball_Y; //足球當(dāng)前幀的前一幀的Y坐標(biāo)
private float NextFootball_X; //足球下一幀的X坐標(biāo)
private float NextFootball_Y; //足球下一幀的Y坐標(biāo)
private float Football_R; //足球的半徑
private boolean Direction_Y = false; //當(dāng)前足球的豎直運(yùn)動方向,ture為向上,false為向下
private boolean Direction_X = false; //當(dāng)前足球的水平運(yùn)動方向,ture為向左,false為向右
private float Football_distance_X = 0.5f; //前后兩幀X方向的距離,大于0,則是向右運(yùn)動,小于0,則是向左運(yùn)動
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 ; //足球當(dāng)前的高度
private int IsStrike = 0; //碰撞類型標(biāo)記,0為無碰撞,1為左側(cè)碰撞,2為右側(cè)碰撞,3為地板碰撞,4為頭部碰撞
public boolean state = true ; //用來標(biāo)記當(dāng)前游戲的狀態(tài),如果state變?yōu)閒alse,則表明球觸到地面了,游戲應(yīng)該結(jié)束
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; //初始化足球的當(dāng)前X坐標(biāo)
this.Football_Y = Football_Y; //初始化足球的當(dāng)前Y坐標(biāo)
this.Football_distanceR_Y = Football_ditanceR_Y; //初始化前兩幀的距離和后兩幀的距離在Y方向上之差,重力越大,此值越大
this.Football_diatanceR_Y_ = this.Football_distanceR_Y;
this.PreFootball_X = Football_X; //初始化足球的前一點(diǎn)X坐標(biāo)
this.PreFootball_Y = Football_Y; //初時化足球前一點(diǎn)坐標(biāo)的Y坐標(biāo)
this.Resistance_air = Resistance_air; //空氣阻力造成的距離差
}
//計算下一點(diǎn)的X坐標(biāo)
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;
}
//確定當(dāng)前運(yùn)動的方向,分兩個方向,向上or向下
public void isDirection_Y(){
if(this.Football_Y <= this.PreFootball_Y){
this.Direction_Y = true;
}else
this.Direction_Y = false;
}
//計算下一點(diǎn)的Y坐標(biāo)
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,無碰撞,則調(diào)用這個函數(shù)
public boolean strikeNo(){
this.cmpNext_X();
this.cmpNext_Y();
return true;
}
//顯示足球當(dāng)前幀 ,并且對數(shù)據(jù)進(jìn)行更新,
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的坐標(biāo)點(diǎn)各值,包括當(dāng)前,以前和以后的坐標(biāo)
// private int TimeM=0;
public void updata_XY(){
//使球旋轉(zhuǎn)起來
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;
}
//根據(jù)傳入的精靈和傳入精靈的類項來檢測碰撞,并更新IsStrike值
//碰撞類型標(biāo)記,0為與天花板碰撞,1為左側(cè)碰撞,2為右側(cè)碰撞,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("左側(cè)碰撞");
break;
case 2:
this.strikeNext_Two();
System.out.println("右側(cè)碰撞");
break;
case 3:
//當(dāng)無y方向的運(yùn)動時,足球的x方向運(yùn)動也將停止
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; //球掉落在地上,引發(fā)游戲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("地板碰撞");
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -