我有这个代码,其中手下有一个Backgroung,两个都是Bitmap图像。现在,如果点击接触到手,我必须使用onClick方法进行控制。为此,我在这里写了一些人告诉我使用一种名为" bitmap.getPixel(int x, int y)
"给出了触摸像素的颜色。为了控制点击是否触摸手,我写了{34} bitmap.getPixel(x, y)
!= Color.TRASPARENT"
,但并不完美。在这下我写了SurfaceView的代码。
P.S。位图" Hand"是一张中央手的图片,周围有零件。
public class GamePanel extends SurfaceView implements SurfaceHolder.Callback{
private long missileStartTime;
private ThreadLv1 thread;
private OggettiLv1 hand;
private int conto=0;
private Sfondo sfondo;
MediaPlayer ouch;
public GamePanel(Context context){
super(context);
getHolder().addCallback(this);
thread = new ThreadLv1(getHolder(), this);
setFocusable(true);
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height){}
@Override
public void surfaceDestroyed(SurfaceHolder holder){
boolean retry = true;
while(retry)
{
try{thread.setRunning(false);
thread.join();
}catch(InterruptedException e){e.printStackTrace();}
retry = false;
}
}
@Override
public void surfaceCreated(SurfaceHolder holder){
hand = new OggettiLv1(BitmapFactory.decodeResource(getResources(), R.drawable.mano5));
sfondo = new Sfondo(BitmapFactory.decodeResource(getResources(), R.drawable.sfondo));
ouch= MediaPlayer.create(getContext(), R.raw.ouch);
knifesong.start();
thread.setRunning(true);
thread.start();
}
public void update() {
}
@Override
public void draw(Canvas canvas)
{
if(canvas!=null) {
final int savedState = canvas.save();
background.draw(canvas);
hand.draw(canvas);
drawText(canvas);
canvas.restoreToCount(savedState);
}
}
@Override
public boolean onTouchEvent(MotionEvent event)
{
float x = event.getX();
float y = event.getY();
switch(event.getAction())
{
case MotionEvent.ACTION_DOWN:
int c = hand.sprite.getPixel((int) event.getX(), (int) event.getY());
if(c!=Color.TRANSPARENT){
conto++;
}
return true;
}
return false;
}
}
有人知道此代码中的问题和解决方案吗?提前谢谢。
答案 0 :(得分:0)
我认为这可能是问题所在:
int c = hand.sprite.getPixel((int) event.getX(), (int) event.getY());
我认为你在精灵上的x,y位置得到一个像素的值,你应该得到画布上像素的值。
修改强>
由于您的画布是静态的,我建议您执行以下操作: 向您的班级添加位图
private Bitmap canvasState;
在draw函数中,先将canvasState初始化为
canvasState = Bitmap.createBitmap(canvas.getWidth(), canvas.getHeight(), Bitmap.Config.RGB_565));
canvas.setBitmap(canvasState);
之后,您对canvas的每个更改都将对canvasState进行更改,您可以在事件处理程序中使用它,如下所示:
int c = canvasState.getPixel((int) event.getX(), (int) event.getY());
我不确定我编写的代码是否会编译(我是从头顶编写的)但我认为你可以自己解决编译错误。