⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 footballclass.java

📁 netbean下开发的
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
/*
 * 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 + -