谁能告诉我如何找出精灵图像相对于背景图像的相对位置? 即,当平移(滚动)背景时,图像应与背景一起移动。
答案 0 :(得分:0)
Sprite是背景图片的孩子吗?如果没有,您可以使用名为localtoGlobal的方法,该方法将点对象从Sprite(本地)坐标转换为背景(全局)坐标。
答案 1 :(得分:0)
一种可能的解决方案是使用虚拟x和y精灵位置,并具有原点x和y位置(这将是屏幕的左上角)。
如果要滚动屏幕,只需修改原点x和y位置。
然后,无论您在屏幕上绘制什么内容,都需要从虚拟位置减去原点位置。
例如
canvas.drawBitmap(bitmap, x - originX, y - originY, paint);
每当你移动任何精灵时,你都会操纵他们的'虚拟'x和y位置。如果将虚拟x,y转换为实际屏幕x,通过减去原点,y将一起移动。
现在,例如,如果您希望背景从右向左滚动,则只需每帧添加到originX。
答案 2 :(得分:0)
好吧......滚动时让精灵与背景一起移动, 代码是:
初始化
PointF touchStart = new PointF();
PointF picStart = new PointF();
PointF prevPicStart = new PointF();
并在onTouchEvent()方法中实现:
@Override
public boolean onTouchEvent(MotionEvent ev) {
switch (ev.getAction()) {
case MotionEvent.ACTION_DOWN:
touchStart.set(ev.getX(), ev.getY());
x = ev.getX();
y = ev.getY();
break;
case MotionEvent.ACTION_MOVE: {
newX = ev.getX() - touchStart.x + prevPicStart.x;
newY = ev.getY() - touchStart.y + prevPicStart.y;
if ((newX <= 0 && newX > 0 - BG_image.getWidth() + ActivityClass.DISP_WIDTH)) {
picStart.x = newX;
}
if ((newY <= 0 && newY > 0 - BG_image.getHeight() + ActivityClass.DISP_HEIGHT)) {
picStart.y = newY;
}
invalidate();
break;
}
case MotionEvent.ACTION_UP:
prevPicStart.x = picStart.x;
prevPicStart.y = picStart.y;
break;
}
return true;
}
onDraw()方法:
@Override
protected void onDraw(Canvas canvas) {
Paint paint = new Paint();
canvas.drawBitmap(mBG_l1, picStart.x, picStart.y, paint);
canvas.translate(picStart.x, picStart.y);
person.draw(canvas);
}