Интересная проблема с шириной / высотой экранного объекта - PullRequest
0 голосов
/ 20 марта 2011

Я столкнулся со странной проблемой в игре с понгом / кирпичом, которую я делаю: одна из специальных способностей игрока состоит в том, чтобы отделить второй шар от основного и действовать точно так же, как основнойза короткий период до исчезновения.Проблема в том, что когда второй шар вступает в контакт с границей сцены и должен просто изменять свою скорость x или y (в зависимости от попадания границы), он также, очевидно, увеличивает свои свойства ширины и высоты по какой-то странной причине.Графика не меняется, но значения ширины и высоты меняются (радикально), и это приводит к тому, что некоторые методы stuckHandler, которые я определил для нечетной ситуации, когда шарик оказывается частично за сценой, вызывают неоднократно.Нигде в коде я не изменяю свойства width, height или scaleX / scaleY, поэтому я понятия не имею, почему это происходит.Читая документацию Adobe, я обнаружил, что следующие два вопроса могут представлять потенциальный интерес по этому вопросу -

  1. Ключевое слово THIS: ссылка на объект, содержащий метод.Когда скрипт выполняется, ключевое слово this ссылается на объект, который содержит скрипт.Внутри тела метода ключевое слово this ссылается на экземпляр класса, который содержит вызываемый метод.--- Разве это не два способа сказать одно и то же?Я не совсем понимаю особенности разницы в области видимости между «this» в начале скрипта и «this» внутри метода ... Так как второй объект шара создается динамически во время игры (основной шар является статическим объектомсозданный до выполнения и управляемый отдельным классом драйвера Ball), который фактически связан с классом Ball2, который управляет им и создает его; ключевое слово «this» часто используется в разных местах в классе для ссылки на графику w.Я боюсь, что некоторая путаница в нюансах, связанных с «этим» в AS3, может быть частично виновата в странных обстоятельствах, которые я вижу.

  2. Свойства Ширина / Высота: Указывает ширину / высотуэкранный объект в пикселях.Ширина / высота рассчитывается на основе границ содержимого экранного объекта.Когда вы устанавливаете свойство width / height, свойство scaleX / scaleY корректируется соответствующим образом.--- Что именно они подразумевают под «содержимым экранного объекта»?Это просто графика или это может быть что-то еще при определенных обстоятельствах?Может ли содержание измениться после изменения скорости по какой-то причине?С помощью отладки операторов печати я обнаружил, что в точке, где ширина и высота расширяют свойства scaleX и scaleY, остаются равными 1, что указывает на то, что Flash не «знает», что размер объекта эффективно изменился ...

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

ffLog.txt Ball2.txt

1 Ответ

0 голосов
/ 20 марта 2011

Из вашего класса Ball2:

...
callParts = new CallParts((this.x + (this.width/2)),50);
addChild(callParts);

Вы добавляете в шар ребенка какого-то размера. Неудивительно, что его размер увеличен. DisplayObject всегда достаточно большой, чтобы содержать его дочерние и / или графические фигуры. Вы уверены, что ваши объекты вложены правильно?

...