2015-05-15 2 views
0

У меня проблема, когда я говорю, объект посередине, тогда я хочу снять снаряд из объекта. Я сделал много триггеров/геометрий, чтобы получить правильные углы & длины сторон для этого «невидимого треугольника», так сказать, но у меня проблема со скоростями снарядов.Как обрабатывать «частичные пиксели»

Если я поднимаюсь над бегом, тогда скорость движется слишком быстро, так как мой холст составляет всего 800 X 600. Если я попытаюсь сделать это число очень маленьким, разделив его на очень большое количество, то он будет стремиться к гибели эффект, поскольку пиксели не могут перемещать дроби/десятичные числа, поэтому я, по существу, должен держать это число выше 0 или он полностью игнорирует эту скорость.

Например, если у меня есть подъем над пробегом:

rise = 800 
run = 50 

Если я делю, что на 10, мой velocity.X = 5, но мой velocity.Y = 80 (будет от холста в Второй). Если я делю на большее число, скажем 100, то скорость.Y теперь 8 (все еще быстрая, но более управляемая), но speed.X = 0.5, которая будет округлять до 0, так как drawRectangle пиксельные точки должны быть целыми. Таким образом, этот снаряд продвигается со скоростью 8, и он не перемещается вправо, потому что он округляется до 0.

Я рассмотрел идею увеличения моих скоростей как с той же скоростью, пока оба они были больше 0, но это приведет к (1,16), поэтому, вероятно, он будет очень быстро перемещаться с экрана и/или появляться так, как будто он никогда не срабатывал вообще.

Есть ли хороший способ справиться с этой ситуацией?

+4

Вам не нужно сохранять местоположение объекта в виде пикселя. Вы должны сделать различие между (а) миром, в котором вы работаете, и (б) рендерингом этого мира ... –

+0

Что CommuSoft говорит и/или выполняет ваши вычисления физики в плавающей точке. –

ответ

-1

для снаряда горизонтальной и вертикальной скорости будет такой же, только если оно вылетает под углом 45 градусов, если изменить угол вы можете использовать различные скорости для обоих X и Y

горизонтальная скорость = начальная скорость * соз (a) вертикальная скорость = начальная скорость * sin (a)

1

Выполняйте интеграцию с использованием арифметики с плавающей запятой. Возможно, даже моделируйте физику, используя реалистичные физические единицы и размеры реального мира.

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

Смежные вопросы