2017-02-06 19 views
-2

У меня есть программа-тестер, которая используется для создания начала игры.Как вы получаете свой спрайт для отскока краев экрана на экране?

У меня возникли проблемы с атрибутами скорости в операторах if, которые должны создавать эффект отскока от спрайта экрана, но я не могу получить правильную комбинацию. Работая над этим в течение долгого времени, и, похоже, не добился какого-либо прогресса. Любая помощь будет оценена.

На стороне примечания, в методах else, где есть атрибут getWidth и getHeight, предполагается, что высота и ширина экрана должны быть увеличены. Но я не уверен, что да. При необходимости я могу прикрепить этот класс. Но ниже я добавлю метод, который у меня есть, чтобы попытаться создать эффект «Bounce» на краях моего экрана.

public void checkScreenEdge(Sprite s){ 
    if (s.getX() > getWidth()){ 

    } 
    else if (s.getX() + s.getWidth() >= getWidth()); 
    { 

    } 

    if (s.getY() > getHeight()) { 

    } 
    else if (s.getY() + s.getHeight() >= getHeight()) 
    { 

    } 
} 
+0

Не было бы 'x <0 || x + width> width' будет более уместным? Тогда вы можете просто изменить скорость в противоположном направлении 'xVelocity * = -1'? – MadProgrammer

+0

Надеюсь, вы вызываете ваш метод с определенной предопределенной скоростью в секунду. –

+0

@Abhijith: но всегда лучше рассчитать кусочки реального времени –

ответ

1

Если вы используете значение DeltaX и deltaY (или значение скорости), чтобы решить, в каком направлении двигаться, просто изменить значение с положительного на отрицательный или наоборот в соответствующем месте. Например:

if (s.getX() <= 0) { 
    s.setDeltaX(Math.abs(s.getDeltaX()); 
} else if (s.getX() + s.getWidth() >= MAX) { 
    s.setDeltaX(-Math.abs(s.getDeltaX()); 
} 

Я чувствую, что это важно использовать абсолютное значение, а не непосредственно поменяв значений DeltaX, потому что если вы сделали это:

if (s.getX() <= 0) { 
    s.setDeltaX(-s.getDeltaX()); 
} 

вы рискуете спрайт быть «в ловушке» по краям с дельтами, переворачивающимися многократно из-за перестрелки.

+0

Когда вы говорите> = Макс, что вы подразумеваете под этим? Максимальное значение? –

+0

@CaptainCode: это для вас, чтобы решить и определить - правильную границу вашей модели. –

+0

Не могли бы вы просто назначить это размером экрана? У меня есть класс, который автоматически содержит размер экрана, поэтому я мог бы использовать это право? Или мне нужно создать новую переменную –