![]() |
|
||||||||||
|
|||||
|
Регистрация: Feb 2012
Сообщений: 3
|
Не судите строго, AS изучаю буквально второй день... Знаю несколько других языков прикладных, и там как-то проще все это. В двух словах что реализуется: есть массив карты с координатами и индексами текстур, через load делаю подгрузку двух картинок(по мне очень криво), далее должен идти вывод карты на экран, но тут первая проблема, load живет своей жизнью, и весь скрипт его не ждет... т.е должен происходить вывод картинок, а их как бы нет. И 2 вопрос, как можно создать массив текстур (1.jpg,2.jpg,3.jpg,4.jpg) с подгрузкой картинок, и далее накладывать (копировать,клонировать) их на другие объекты? Пожалуйста не судите строго..
package { import flash.events.*; import flash.display.*; import flash.net.*; import flash.geom.*; import flash.text.*; public class Main extends Sprite { public var imageLoader:Loader = new Loader(); public var imageLoader1:Loader = new Loader(); public static var masmap:Array = new Array(); public static var masmap_texture:Array = new Array(); public static var bmp:Bitmap; public static var bmp1:Bitmap; public static var bmpmas:Array = new Array(); public static var bmpmasindex:int; public function Main():void { bmpmasindex = 0; masmap[0] = 'x0y0'; masmap_texture[0] = 0; masmap[1] = 'x1y0'; masmap_texture[1] = 0; masmap[2] = 'x2y0'; masmap_texture[2] = 1; masmap[3] = 'x0y1'; masmap_texture[3] = 0; masmap[4] = 'x1y1'; masmap_texture[4] = 1; masmap[5] = 'x2y1'; masmap_texture[5] = 0; masmap[6] = 'x0y2'; masmap_texture[6] = 0; masmap[7] = 'x1y2'; masmap_texture[7] = 0; masmap[8] = 'x2y2'; if (stage) init(); else addEventListener(Event.ADDED_TO_STAGE, init); var theURL:String = "../img/map/mapmini1.png"; var imageRequest:URLRequest = new URLRequest(theURL); imageLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, onComplete); imageLoader.load(imageRequest); var theURL1:String = "../img/map/mapmini2.png"; var imageRequest1:URLRequest = new URLRequest(theURL1); imageLoader1.contentLoaderInfo.addEventListener(Event.COMPLETE, onComplete1); imageLoader1.load(imageRequest1); var index_texture:int; var selectindex:int; var temp_string:String; for (var ix:int = 0; ix <= 3; ix++) { for (var iy:int = 0; iy <= 3; iy++) { temp_string = String('x') + String(ix) + String('y') + String(iy); selectindex = masmap.indexOf(temp_string); trace(temp_string); switch (index_texture) { case 0: trace ("Вывод первой текстуры"); break; case 1: trace ("Вывод сторой текстуры"); break; } } } } public function onComplete(evt:Event):void { bmp = imageLoader.content as Bitmap; //addChild(imageLoader.content); bmpmas[bmpmasindex] = new Bitmap(bmp.bitmapData); bmpmas[bmpmasindex].x = 100; bmpmas[bmpmasindex].y = 100; addChild(bmpmas[bmpmasindex]); bmpmasindex++; //bmpmas[bmpmasindex] = new Bitmap(bmp.bitmapData); //bmpmas[bmpmasindex].x = 100; //bmpmas[bmpmasindex].y = 100; //addChild(bmpmas[bmpmasindex]); //bmpmasindex++; var bmp3 = new Bitmap(bmp.bitmapData); bmp3.x = 200; bmp3.y = 200; addChild(bmp3); trace ("Img Complete"); } public function onComplete1(evt:Event):void{ bmp1 = imageLoader1.content as Bitmap; //addChild(imageLoader1.content); //imageLoader1.content.x = 200; //var bmp2 = new Bitmap(bmp.bitmapData); //bmp2.x = 300; //bmp2.y = 300; //addChild(bmp2); } private function init(e:Event = null):void { removeEventListener(Event.ADDED_TO_STAGE, init); // entry point } } } |
|
|||||
|
Нуб нубам
модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
|
0. Как Вы думаете, что означает фраза "// entry point" в шаблоне класса?
1. Ну так ждите. Нет картинок – нет мультиков. 2. Загрузить картинки и сложить их в массив? Непонятно, Вы хотите чтобы картинки были до того, как они загрузятся? Объясните логику вопроса.
__________________
Reality.getBounds(this); |
|
|||||
|
Регистрация: Feb 2012
Сообщений: 3
|
0. Почитал почитал, так и не понял .. буду очень благодарен за объяснения.
1. Насчет картинок как бы стало понятно... 2. Есть карта (массив с координатами и индексом текстуры - каждая ячейка). должна быть функция, которая подгрузит картинки(текстуры карты) и сохранит их в виде массива. должно получиться примерно так: textura_name[0]= "карта1"; textura_data[0] = bitmap; textura_name[1]= "карта2"; textura_data[1] = bitmap; for(x,x,x){
for(y,y,y){
//Получаем координаты выводимого блока x,y
//Узнаем с каким именем текстура в этой блоке
//Получаем индекс текстуры по имени
//Выводим на экран (допустим) textura_data[1] (причем должна быть копия объекта как я понимаю)
//либо что-то типа bitblt в буфер вывода по координатам экрана
}
}
|
|
|||||
|
Регистрация: Jan 2012
Сообщений: 35
|
AS - асинхронный язык. Программирование на нем осуществляется методом "пнул и забыл". А Вы пытаетесь использовать его как синхронный язык. То бишь программировать методом "Вызвал и получил результат".
Вот Вам простой пример на псевдоязыке синхронного сложения двух чисел и вывода результата: f
Цитата:
Должны быть две функции. Первая - инициирует загрузку картинок. Вторая - умеет что-то делать с загруженной картинкой ( куда-то складывать, показывать и т п.) Первую вызываете Вы. Вторая - обратный вызов вызывается в потоке самим loader-ом |
|
|||||
|
Нуб нубам
модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
|
Цитата:
У Вас в конструкторе осталась подписка на событие добавления экземпляра на стейдж. Это момент, когда надо начать инициализацию (так как в подавляющем большинстве случаев визуальному экземпляру надо иметь ссылку на стейдж, а она доступна после добавления этого экземпляра на стейдж))). Что эта подписка сейчас делает в Вашем коде, Вы наверное сами не понимаете – вызывает метод init(), но зачем, если все что в этом методе есть – это отписка от события, которое его вызвало)))) Дело вобщем в том, что весь код, который сейчас у Вас в конструкторе (кроме упомянутой подписки), должен располагаться в методе init(), то есть вызываться только после того, как экземпляр будет добавлен на сцену. Это не относится к вопросу топика, не решает его проблему. Это просто замечание, что класс написан в корне неверно. Цитата:
__________________
Reality.getBounds(this); |
|
|||||
|
Регистрация: Feb 2012
Сообщений: 3
|
Более менее стало понятно, но вопросов еще больше появилось... Вот что получилось сейчас http:// coolfuns. net/ ... Безграничная карта с динамично подгружающимися текстурами.
|
![]() |
![]() |
Часовой пояс GMT +4, время: 15:44. |
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | |
| Опции просмотра | |
|
|