我试图制作游戏,但是当我触摸屏幕时,我无法让我的精灵方法在抛物线路径中弹跳,如果是对象(它是一个对象)将图像变成画布)触摸和屏幕边缘它应该反弹,我将非常感谢你的帮助,非常感谢你。这是代码:
import android.annotation.SuppressLint;
import android.content.Context;
import android.content.res.Resources;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Paint.Align;
import android.os.Handler;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;
public class Juego extends View implements OnTouchListener {
Bitmap bmap ;//Capa de bits
Paint paint = new Paint();//estilos
Canvas canvas;
int position,x,y,counter=0;
int vX=5, vY=10;
Handler h;
Resources res = getResources();
Boolean flag;
int FRAME_RATE=15;
int[] imageAvoider = {
R.drawable.robot};
public Juego(Context context, AttributeSet attrs) {
super(context, attrs);
this.setOnTouchListener(this);
h = new Handler();
}
public void inicio(Canvas canvas){
x = ((canvas.getWidth()-bmap.getWidth())/2);
y = ((canvas.getHeight()-bmap.getHeight())/2);
paint.setColor(Color.RED);
paint.setTypeface(MainActivity.letra);
paint.setTextSize(canvas.getWidth()/12);
paint.setTextAlign(Align.CENTER);
canvas.drawText("Pole Avoider", canvas.getWidth()/2, canvas.getHeight()/4, paint);
paint.setTextSize(canvas.getWidth()/8);
canvas.drawText("Tap me", canvas.getWidth()/2, (canvas.getHeight()/4)*3, paint);
}
@SuppressLint("DrawAllocation")
public void onDraw(Canvas canvas){
super.onDraw(canvas);
bmap = BitmapFactory.decodeResource(res,imageAvoider[position]);
if (flag==true){
inicio(canvas);
}
// HERE IS THE CODE I WANT TO REPLACE
// x += vX;
// y += vY;
//
// if ((x > this.getWidth() - bmap.getWidth()) || (x < 0)) {
// vX=vX*-1;
// }
//if ((y > this.getWidth() - bmap.getWidth()) || (y < 0)) {
// vY=vY*-1;
//}
// h.postDelayed(r, FRAME_RATE);
canvas.drawBitmap(bmap,x,y, paint);
}
protected void onSizeChanged(int w, int h, int oldw, int oldh) {
super.onSizeChanged(w, h, oldw, oldh);
}
private Runnable r = new Runnable() {
@Override
public void run() {
invalidate();
}
};
public boolean onTouch (View view, MotionEvent event) {
flag=false;
switch (event.getAction()){
case MotionEvent.ACTION_DOWN:
position=0;
MainActivity.sonido();
invalidate();
break;
case MotionEvent.ACTION_UP:
position=0;
invalidate();
break;
default: return false;
}
return true;
}
}