找到相对于背景图像的精灵位置

时间:2011-02-25 12:27:24

标签: android image scroll

谁能告诉我如何找出精灵图像相对于背景图像的相对位置? 即,当平移(滚动)背景时,图像应与背景一起移动。

3 个答案:

答案 0 :(得分:0)

Sprite是背景图片的孩子吗?如果没有,您可以使用名为localtoGlobal的方法,该方法将点对象从Sprite(本地)坐标转换为背景(全局)坐标。

http://livedocs.adobe.com/flash/9.0/ActionScriptLangRefV3/flash/display/DisplayObject.html#localToGlobal%28%29

答案 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);
    }