【问题标题】:I'm building a car game I want to move a car through the keyevent , the algorithm is okay, but the car doesn't move我正在构建一个汽车游戏我想通过keyevent移动汽车,算法可以,但是汽车不动
【发布时间】:2013-11-19 03:55:16
【问题描述】:

主要课程是:

public class test extends Activity{
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(new Game(this,null));
}

}

Game类是从view类扩展而来的,可以让我们绘制汽车并设置它的位置,我调用了onkey方法来控制汽车的方向和角度

public class Game extends View {
private Paint paint= new Paint();
float x,y;
float speed = 5,angle = 0,mod = 0;
Bitmap car;
Boolean b=false;
public Game(Context context, AttributeSet attrs) {
    super(context, attrs);
    try { // here I call the car image as a bitmap object
        AssetManager assetManager=context.getAssets();
        InputStream inputStream= assetManager.open("car.png");
        BitmapFactory.Options options=new BitmapFactory.Options();
        options.inPreferredConfig = Bitmap.Config.ARGB_4444;
        car=BitmapFactory.decodeStream(inputStream,null,options);
        inputStream.close();
        Log.d("Bitmap Text", "bobrgb888.png format: "+car.getConfig());
    } catch (Exception e) {
    // TODO: handle exception
    }
 }

       @Override
       protected void   onDraw(Canvas canvas) {
       x += (speed*mod) * Math.cos(Math.PI/180 * angle);
           y += (speed*mod) * Math.sin(Math.PI/180 * angle);
       canvas.rotate((float) (Math.PI/180 * angle));
       canvas.drawBitmap(car,-(car.getWidth()/2), -(car.getHeight()/2), null);
       canvas.restore();
      }
          public boolean onKey(View view, int keyCode, KeyEvent event) {
        switch (event.getAction()) {
        case KeyEvent.ACTION_DOWN:              
            break;
        case KeyEvent.ACTION_UP:
            {if(event.getKeyCode() == KeyEvent.KEYCODE_A ||               event.getKeyCode() == KeyEvent.KEYCODE_B)
            {
                this.mod = 0;
            }}
            break;

        case KeyEvent.ACTION_MULTIPLE:{
            if(event.getKeyCode() == KeyEvent.KEYCODE_A)
            {
                mod = 1;
            }
            if(event.getKeyCode() == KeyEvent.KEYCODE_B)
            {
                mod = -1;
            }
            if(event.getKeyCode() == KeyEvent.KEYCODE_C)
            {
                angle -= 5;
            }

            if(event.getKeyCode() == KeyEvent.KEYCODE_D)
            {
                angle+=5;
            }
            }
            break;
        }
        invalidate();
        return event.getKeyCode() != KeyEvent.KEYCODE_BACK;
    }
}

我设置下一个点的 x 和 y 我旋转图像,按照选择的角度 我在当前位置绘制汽车。 当 A 或 B 键向上时,汽车停止 长按按键(A,B,C,D),角度和方向发生变化。

【问题讨论】:

    标签: java android game-physics


    【解决方案1】:

    使用这个:

    @Override
        public boolean onKeyDown(View view, Editable arg1, int keyCode, KeyEvent event) {
    

    而不是这个:

    public boolean onKey(View view, int keyCode, KeyEvent event) {
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-13
      • 2018-10-13
      • 2012-08-18
      • 1970-01-01
      • 1970-01-01
      • 2020-08-09
      相关资源
      最近更新 更多