Вообщем нужно сделать уровень в игре длинной 2000 блоков размером 50х50. Проблем и тормозов с уровнем нет, так как все блоки в уровне статичные их можно кешировать как Bitmap, но как быть с другими объектами, бонусами например, их же не кешируешь? Ас3.
Короче я скачал исходников 6 наверно способа конвертации мувика и массив с битмапами + исходник дракулы и ни в одном не разобрался, но принцип мне понятен. Придется самому написать.
PolarisF, а может не надо так мудрить? Попробуй сделать прямо как есть, с векторными мивиками. И посмотри чего получится. Только расставь их по карте примерно так, как будет в игре, а не лепи всё в кучу.
Значит я разобрался в том исходнике который мне дал дракула, и понял что он мне не подходит. Т.к как там создается массив с битмапдатами и просто проигрывается, мне же нужно что бы растрировались кадры в самом мувике. Короче я сделал такую функцию:
private function cacheMovieClip(mm:MovieClip) { for (var md = 1; md <= mm.totalFrames; md++) { mm.gotoAndStop(md);
var bounds:Rectangle = mm.getBounds(mm);
var matrix:Matrix = new Matrix();
matrix.translate(-bounds.x, -bounds.x);
var bitmap:BitmapData = new BitmapData(mm.width, mm.height, true, 0x000000); bitmap.draw(mm, matrix);
var bmp:Bitmap = new Bitmap(bitmap); bmp.x = bounds.x; bmp.y = bounds.y;
mm.removeChildAt(0);
mm.addChild(bmp); } }
Короче я думал будет, что я просто переберу все кадру в мивуке, растрирую их, удалю из кадра векторную графу, помещю в кадр растр и у меня получится растровый мувик. Хрен там был. Цикл прошел нормально, запускаю анимацию, и клип опять стал векторным!!! ЧЁ ДЕЛАТЬ!?
Вот щас поэкспериментировал, 3000 объектов с логикой, движущиеся - когда они на экране (все в куче) тормозит, когда за экраном - нормально. Объекты в массиве, обход всего массива каждый кадр, проверка столкновений с персонажем.
А вообще, флэш вроде без особого труда справится с кучей объектов, находящихся за экраном, т.е. которые не надо рисовать. Если у них нет сложной логики, конечно.
Динамически создавать и уничтожать? Запихнуть все бонусы в один массив, а отображаемые - в другой. Периодически обновлять второй массив в зависимости от координат игрока (на координатах кратных 100 точкам, например). Ну это чисто для ускорения, чтоб не проходить каждый цикл всю кучу объектов.