Проверка цвета объекта в if statment в Actionscript 3 - PullRequest
1 голос
/ 16 декабря 2011

Я хочу проверить, реагирует ли цвет = определенный цвет, и соответственно.Это делается во флэш-памяти AS3.

код, который я получил: if(cal_mc.color == 0x0000FF) { p1score = p1score + 25;

(cal_mc - объект)

Он выполняется без ошибок, ноРабота.Может кто-нибудь сказать мне, что я делаю не так с утверждением if?Желательно, чтобы код был максимально простым.

1 Ответ

4 голосов
/ 16 декабря 2011

Насколько я понимаю, в вашем коде используется простой объект MovieClip (cal_mc имеет тип MovieClip).

Краткий ответ: Нет свойства "color" на MovieClip, поэтому ваше первое условие не выполняется.

Длинный ответ:

MovieClips по определению являются динамическими объектами, поэтому они могут иметь свойства, определенные во время работы вашего кода:

var custom:MovieClip = new MovieClip();
custom.potato = "I am a potato!"; // creates a new property "potato" and assigns it the value of "I am a potato".
trace(custom.potato); // outputs "I am a potato";

В MovieClip нет свойства "color", поэтому ваш оператор условия ложен в теоретическом состоянии, но практически flash не выдает никаких ошибок, поскольку MovieClip s может иметь свойства, назначенные во время выполнения, поэтому flash не могу знать, если вы не определили «цвет» где-либо.

Есть несколько решений:

  • Либо создать пользовательский класс, расширяющий MovieClip, который будет содержать свойство color, и некоторые методы для рисования нужной графики и логики для назначения правильного значения свойству color по завершении рисования.
  • Если ваша MovieClip - простая фигура, я предполагаю, что это - визуализируйте объект от MovieClip до Bitmap, а затем выберите первый пиксель (поскольку все пиксели простых фигур имеют одинаковый цвет ) из Bitmap с bitmapData.

Вот код для последнего: (этот код может потребовать доработки, это схема)

function sampleColorFromDisplayObject(display:DisplayObject):uint
{
    var bd:BitmapData = new BitmapData(display.width, display.height, false, 0xFF0000);
    bd.draw(display, new Matrix());
    var color:uint = bd.getPixel(0, 0);
    bd.dispose();
    return color;
}

Имейте в виду, что из-за различных возможных форм и размеров этот код может потребовать доработки и может не работать должным образом с некоторыми формами. Я сделал так, чтобы код работал с максимально возможным количеством фигур, увеличив размер bitmapData и выбрав первый пиксель для учета определенных типов кругов и форм, определенных в IDE flash.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...