#actionscript-3 #cs4
#actionscript-3 #cs4
Вопрос:
Я пытаюсь создать многоуровневое приключение в подземелье во Flash CS4. Макет представляет собой экземпляр, созданный для символа с именем Level, внутри символа находятся несколько подсимволов wall (стена), экземпляров Wall. Существует процедура столкновения, которая останавливает игрока, проходящего сквозь стены, вызываемая из Wall.As . Уровень рисуется около центральной точки (0,0). Когда я создаю экземпляр на этапе Level (уровень), тестер столкновений использует координаты xy для стен, нарисованных примерно на 0,0, а не «реальный» xy, где он появляется на этапе. Итак, что мне нужно знать, так это как «обновить» xy для каждого подсимвола стены информацией о текущей сцене, переопределяя XYs, нарисованные в родительском. К сожалению, его необходимо обновить (я не могу сохранить его статичным), так как уровни большие, поэтому приходится прокручивать.
Спасибо за ваш совет.
Ответ №1:
При всем уважении забудьте о своем подходе, вы зря изобретаете велосипед и, вероятно, в конечном итоге получите худшую производительность. Что вам нужно, так это идеальное обнаружение столкновений в пикселях и, вероятно, включение базовой физики, так что мы уже говорим об огромном объеме работы. Если вы хотите создавать уровни в стиле дизайна для игры, используйте это, это поразит вас, насколько это потрясающе / просто / круто:
Комментарии:
1. на самом деле создание идеальной коллизии пикселей с использованием BitmapData и точек происходит быстрее, на большинстве ПК это незаметно, но если вы перенесете flash-приложения на мобильные устройства, вы увидите разницу.
2. Я не совсем уверен, что понял ваш комментарий, подразумевает ли мой ответ, что столкновение на основе пиксельного идеального растрового изображения происходит медленнее? Если вы просто делаете заявление, я согласен, класс bitmapdata очень, очень быстр во flash.
Ответ №2:
При попытке ответить на подобные вопросы всегда приходится гадать, поскольку существует много неизвестных. При этом в программировании всегда существует более нескольких способов решения проблемы. Изучите свою процедуру обнаружения столкновений — если вы работали с точкой попадания и точкой, которая тестировалась (mouseX, Y или вашим основным участником) с помощью localToGlobal, вам, вероятно, не нужно было бы проверять переменные x, y ваших объектов столкновения. Ознакомьтесь с этими двумя темами, и этот вопрос может оказаться спорным.
В любом случае, вы могли бы обновить относительные координаты в вашем Wall.as создание экземпляра с использованием globlaToLocal:
public function get curLoc():Point
{
return globalToLocal(new Point(this.x, this.y));
}
и извлеките их из вашего родительского класса в качестве точки, с которой затем можно протестировать:
trace(_wall.curLoc);
Надеюсь, это поможет
Комментарии:
1. работает ли localToGlobal независимо от того, насколько «глубок» спрайт (возможно, объект sprite создается под другим объектом sprite, который находится на стадии разработки?
2. @Saad Я верю, что это так, но localToGlobal и globalToLocal — это сложные методы, которые должны использоваться определенным образом. emanueleferonato.com/2010/06/22 /… .
Ответ №3:
Я полагаю, вы могли бы выполнить то, что пытаетесь сделать, манипулируя свойством transform символов wall, но, честно говоря, я бы согласился с Ascension Systems и просто отказался от вашей процедуры тестирования столкновений ради чего-то другого.
Возможно, вам не нужно полностью использовать физический движок для вашей игры, в этом случае просто используйте hitTestObject для обнаружения столкновений.