поиск позиции спрайта относительно фонового изображения - PullRequest
0 голосов
/ 25 февраля 2011

Может кто-нибудь сказать мне, как узнать относительное положение изображения спрайта относительно фонового изображения?т.е. когда фон панорамируется (прокручивается), изображение должно двигаться вместе с фоном.

Ответы [ 3 ]

0 голосов
/ 25 февраля 2011

Одно из возможных решений - использовать виртуальные позиции спрайтов x и y и иметь исходную позицию x и y (которая будет в верхнем левом углу экрана).

Когда вы хотите прокрутить экран, вы просто изменяете исходную позицию x и y.

Затем, где бы вы ни рисовали что-либо на экране, вам необходимо вычесть исходную позицию из виртуальной позиции.

Например.

canvas.drawBitmap(bitmap, x - originX, y - originY, paint);

Всякий раз, когда вы перемещаете любой спрайт, вы манипулируете их «виртуальными» позициями x и y. Если вы переведете виртуальный x, y в реальный экран x, y, вычтя начало координат, все будет двигаться вместе.

Например, если вы хотите, чтобы ваш фон прокручивался справа налево, вы просто добавляете к originX каждый кадр.

0 голосов
/ 02 апреля 2011

хорошо ... для того, чтобы спрайт двигался вместе с фоном при прокрутке, код:

инициализирует

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);
    }
0 голосов
/ 25 февраля 2011

Является ли Sprite дочерним элементом фонового изображения?Если нет, вы можете использовать метод localtoGlobal, который преобразует точечный объект из (локальных) координат спрайта в фоновые (глобальные) координаты.

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

...