Есть ли метод, который проверяет, затронуто ли изображение или актер libgdx Scene2d?

вот мой образец из игры для Android libgdx, которую я хочу создать. Пока ничего особенного, потому что я только начинаю свое приключение с играми для Android.

Вот пара вопросов, на которые я хотел бы получить ответы

Пока я использую функцию Gdx.input.isTouched и проверяю, соответствует ли она координатам кролика, я делаю это для каждого кролика, и в конце я хотел бы иметь 11 из них, и это слишком много для записи. Есть ли способ проверить, является ли класс Image из import com.badlogic.gdx.scenes.scene2d.ui.Image; был тронут? Или еще у класса Актера есть эта функция?

Другое дело, что когда я создаю экземпляр класса кролика и нажимаю на кролика, все они меняются на «испуганные». Это потому, что текстура Scene2d.Image должна быть статической. Есть ли способ изменить это?

if(Gdx.input.isTouched()){  

            x = Gdx.input.getX();  
            y = Gdx.graphics.getHeight() - Gdx.input.getY();


         // **** Show Coordinates **** \\ 
            if (x < 420)
                font.draw(batch, "x:" + x + 
                    "\n y: " + y, x, y);
            else
                font.draw(batch, "x:" + x + 
                        " y: " + y, x-65, y);
         // **** End Show Coordinates **** \\

            //if krolik (bunny) is touched add highscore and change texture to scared
            if (x >= krolik.pos.x && y >= krolik.pos.y
                    && x <= krolik.pos.x + 64 && y <= krolik.pos.y + 64)
            {   
                krolik.scared();
                highscore+=100;
            }
            else if (x >= krolik2.pos.x && y >= krolik2.pos.y
                    && x <= krolik2.pos.x + 64 && y <= krolik2.pos.y + 64)
            {   
                krolik2.scared();
                highscore+=100;
            }
       } 
        else{

        krolik.normal();

        }
        // **** Show Highscore **** \\ 
        font.draw(batch, "Highscore: " + highscore, 350, 300);
        batch.draw(krolik.getTexture(), krolik.pos.x, krolik.pos.y);
        batch.draw(krolik2.getTexture(), krolik2.pos.x, krolik2.pos.y);
            batch.end();

person Peter Poliwoda    schedule 24.04.2012    source источник
comment
см. этот вопрос: stackoverflow.com/questions/9236175/ , это может помочь вам с обработкой ввода в актерах   -  person Ludevik    schedule 24.04.2012


Ответы (1)


Почему вы используете Image, но не рисуете в Stage? Image и другие Актеры предназначены для использования Stage, который может очень легко позаботиться о ваших сенсорных событиях и рисовании.

Создайте их следующим образом:

for (int i = 0; i < KROLIKS_COUNT; i++) {
    final Image krolik = new Image(nonScaredTextureRegion);
    krolik.setClickListener(new ClickListener() {
        @Override
        public void click(Actor actor, float x, float y) {
            krolik.setRegion(scaredTextureRegion);
            highscore+=100;
        }
    });
    krolik.x = startPosX;
    krolik.y = startPosY;
    stage.addActor(krolik);
}

установите сцену в качестве входного процессора:

Gdx.input.setInputProcessor(stage);

затем в рендере просто:

stage.act(Gdx.graphics.getDeltaTime());
stage.draw();
person broken-e    schedule 23.05.2012
comment
Круто, это очень помогает, но знаете ли вы, как я могу использовать это для прослушивания методов touchDragged() или touchDown()? - person Peter Poliwoda; 01.11.2012