Android игра столкновение - PullRequest
       1

Android игра столкновение

2 голосов
/ 20 сентября 2011

У меня на экране много спрайтов. Если спрайт s1 сталкивается со спрайтом2, оба спрайта должны воспроизводить звук (или аналогичный).

Я создал игровой цикл:

public void run( )
{
    long startTime;
    long sleepTime;

    while (this.running)
    {
        startTime = System.currentTimeMillis();


        this.view.updatePhysics( );

        Canvas canvas = null;
        try
        {
            canvas = this.view.getHolder( ).lockCanvas( );
            synchronized (this.view.getHolder( ))
            {
                this.view.onDraw( canvas );
            }
        }
        finally
        {
            if (canvas != null)
                this.view.getHolder( ).unlockCanvasAndPost( canvas );
        }

        sleepTime = TICS_PRO_SECOND - ( System.currentTimeMillis( ) - startTime );

        try
        {
            if (sleepTime > 0)
                GameLoop.sleep( sleepTime );
            else
                GameLoop.sleep( 500 );
        }
        catch (Exception exception)
        {
        }

    }
}

updatePhysics () вызывается много раз. Если я использую отладчик, я вижу, что выполнение кода в collideWith (Sprite sprite) возвращается, чтобы вернуть true, но перейти к следующей строке и вернуть false. Я думаю, это проблема синхронизации ...

Где я должен вызывать метод столкновения в моем игровом цикле? Является ли обновление () правильное место? Я думаю, это не так;). Sprite.onCollision () вызывается очень редко ...

protected void updatePhysics( )
{
    for (Sprite sprite : sprites)
    {

            for (Sprite s : sprites)
            {
                if (sprite.collideWith( s ))
                    sprite.onCollision( );
            }

        sprite.update( );
    }
}


public boolean collideWith( Sprite sprite )
{
    if (this == sprite)
        return false;

    Rect thisSprite = new Rect( this.xCoordinate, this.yCoordinate, this.width, this.height );
    Rect anotherSprite = new Rect( sprite.xCoordinate, sprite.yCoordinate, sprite.width, sprite.height );

    if (thisSprite.intersect( anotherSprite ))
        return true;

    return false;
}

Должен ли я синхронизировать метод collideWith ()? Или мой код

for (Sprite sprite : sprites)
    {

            for (Sprite s : sprites)
            {
                if (sprite.collideWith( s ))
                    sprite.onCollision( );
            }

        sprite.update( );
    }

проблема?

С уважением, Дульсинея

...