ActionScript без списка отображения (цикл обновления / отрисовки)

В последнее время я работал с несколькими разными языками программирования и пришел к выводу, что мне не очень нравится список отображения в ActionScript. Я бы предпочел иметь цикл обновления / рисования и рисовать и управлять всем вручную, как в XNA (C #). Что мне нравится в ActionScript, так это простота использования событий, анимации фрагментов ролика и векторной графики.

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


person omgnoseat    schedule 10.10.2011    source источник
comment
Если вы строите свою систему с учетом абстракции, вы даже не заметите, что используете списки отображения. Так зачем беспокоиться? ;)   -  person Jonatan Hedborg    schedule 10.10.2011
comment
Вы можете абстрагироваться от списка отображения, если хотите, но вы не можете создать свой собственный игровой цикл, потому что это быстро превысит 15-секундный предел тайм-аута скрипта (и у Flash никогда не будет возможности что-либо перерисовать). Кроме того, нет возможности заснуть, поэтому ваш цикл всегда будет работать с максимальной скоростью, поглощая 100% одного ядра процессора, даже если ничего интересного не происходит.   -  person Cameron    schedule 10.10.2011
comment
Да, я действительно не собираюсь создавать свой собственный цикл, просто использовать событие ввода кадра было бы нормально. Я просто не хочу использовать список отображения, но удерживаю каждый элемент в массиве и обновляю / рисую их вручную. Я не совсем понимаю, что вы имеете в виду под абстракцией.   -  person omgnoseat    schedule 15.10.2011


Ответы (2)


Вы можете сделать нечто подобное, создав растровое изображение того же размера, что и сцена, прикрепив его к сцене в качестве дочернего элемента и используя его как «экран», копируя вашу графику на нем каждый кадр (в событии ENTER_FRAME). Я думаю, что это даже упоминается где-то в официальной документации Adobe как метод эффективной анимации большого количества объектов.

person Staven    schedule 10.10.2011
comment
Да, я тоже это видел, но я думаю, что использование блиттинга отключает использование фрагментов роликов или прослушивателей событий :( - person omgnoseat; 15.10.2011
comment
@omgnoseat ничто не мешает вам регистрировать слушателей событий на Bitmap. Я никогда не использовал MovieClips с этим, но я точно знаю, что TextFields можно нарисовать на Bitmap, создав новый Sprite, sprite.addChild(textfield) затем bitmap.bitmapData.draw(sprite). Это должно работать для MC, но я не уверен, что оно того стоит, с точки зрения производительности / усилий. - person Staven; 15.10.2011

Я бы посоветовал вам набраться смелости и отказаться от C # при программировании на ActionScript. Как мудро сказал Бьярн Страуструп в своей книге Язык программирования C ++:

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

Я думаю, это очень хорошо относится к вопросу, который вы здесь задаете.

person stenrap    schedule 10.10.2011
comment
Я думаю, что это правда, но я надеялся, что этого можно добиться, не уходя слишком далеко от ядра флеш-памяти. - person omgnoseat; 15.10.2011