Я собираюсь ввести собственное обнаружение столкновений. Так вот как это работает:C# do события работают синхронно?
- мой объект бросает событие перемещения.
- my world/collision manager прослушивает события перемещения всех движимых объектов и проверяет, перемещаются ли они.
- если они двигаются я проверить столкновения и решить их
теперь дело в том, что скорость движения моих изменений объекта иногда в следующем коде:
private void OnObjectMove(StaticObject MovingObject)
{
if(maskCollision(MovingObject))
{
Console.WriteLine("===============================");
Console.WriteLine("movementX: " + MovingObject.movement_Y.Speed + " movementY " + MovingObject.movement_Y.Speed);
resolveMaskCollision(MovingObject);
}
}
и начало моей решимости метод столкновения:
private void resolveMaskCollision(StaticObject collidingObject)
{
Console.WriteLine("movementX: "+collidingObject.movement_X.Speed + " movementY: " + collidingObject.movement_Y.Speed);
.
.
.
так и пример выход:
movementX: -8,700003 movementY -8,700003
movementX: 0 movementY: -8,700003
Как вы можете видеть, что мой movementX изменился по какой-то причине ...
выход в большинстве случаев то же самое, но иногда это не так и тогда все мои methodes бросить exeptions, потому что я не ожидал скорость до измените там. Теперь мое единственное объяснение для изменения скорости объектов - это то, что событие выполняется на отдельном потоке. Это правда? Как я могу ждать события? И разумно ли ждать, если это возможно? Или это замедлит мой код? (. Я мог бы либо вызвать Methode из моего movingObject как-то Но тогда придется спасти мир/collisionmanager -объект)
Вы вызываете неправильную переменную/свойство в первой части кода. –
Если вы не видите, что говорит @AdamSears, в первом сценарии консоли вы используете move_Y.Speed для обоих значений. Изменить: К сожалению, он редактирует комментарий, чтобы быть более ясным. –
ОК извините. Не видел, что по какой-то причине:/ – crush3dice