![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
Регистрация: May 2009
Сообщений: 220
|
Добрый день!
Имею класс в отдельном AS-файле. Он должен брать из папки текстуру и размножать ее чтобы получить текстурированный участок карты, прикрепляясь к пустому мувиклипу для удобства перемещения: package utility { import flash.display.MovieClip; import flash.display.Loader; import flash.net.URLRequest; public class ScreenMap extends MovieClip { var textureCell:Loader = new Loader(); public var arrayMX:Array; public static var mapWidth:Number; public static var mapHeight:Number; public static var cellPixels:Number; public var map:MovieClip = new MovieClip(); public function ScreenMap(numCellW, numCellH, cellPix) { mapWidth = numCellW; mapHeight = numCellH; cellPixels = cellPix; addChild(map); textureCell.load(new URLRequest("pics/map_texture.jpg")); trace ("есть"); for (var i:uint=0; i<mapHeight; i++) { trace ("есть"); arrayMX[i] = new Array(); trace ("есть"); for (var j:uint=0; j<mapWidth; j++); { arrayMX[i][j] = textureCell; arrayMX[i][j].x = j*cellPixels; arrayMX[i][j].y = i*cellPixels; map.addChild(arrayMX[i][j]); trace ("есть"); } } } } } Цитата:
где он этот "null" берет никак не воткну... первых два trace в output выводятся, а третий - нет. По логике ошибка должна быть здесь: но я не вижу в этом коде ошибки. Может кто-то более зрячий, чем я? ![]() |
|
|||||
|
некрофил
Регистрация: Mar 2002
Адрес: ...по колено в кровище...
Сообщений: 2,292
|
Объявление переменной типа "массив" не есть инициализация этой переменной. В этой строке arrayMX и есть искомый null. Чтобы ошибки не возникало, нужно до цикла инициализовать массив:
__________________
...убивать людей не удовольствия ради, но для еды. |
|
|||||
|
Регистрация: May 2009
Сообщений: 220
|
так я ж в самом начале ее инициализировал:
тьфу, понял о чем речь. Спасибо! Код прошел - правда, текстура так и не отобразилась и ошибки нету... буду думать. Последний раз редактировалось switcher!; 12.07.2009 в 15:58. |
|
|||||
|
некрофил
Регистрация: Mar 2002
Адрес: ...по колено в кровище...
Сообщений: 2,292
|
Это не инициализация. Это объявление.
Добавлено через 6 минут Ну, там ещё логические ошибки разнообразные. Присвоение единственного экземпляра лодера элементам массива не размножает этот экземпляр. Т.е. ты внутри цикла всё время работаешь с одним и тем же объектом, соответственно единственный загруженный объект будет в правом нижнем углу.
__________________
...убивать людей не удовольствия ради, но для еды. |
|
|||||
|
Регистрация: May 2009
Сообщений: 220
|
так и есть!
Спасибище!!!!! я бы не скоро понял в чем проблема сам ![]() есть уже в голове немного другой алгоритм, где эта проблема будет исключена. ![]() Добавлено через 13 минут таааак... а здесь уже сложнее: здесь в каждую ячейку массива заносится свой Лоадер, но в итоге получается только полоска из текстур по самому правому краю (т.е. вертикальная полоска). Не пойму - тут же не идет переприсвоение одного и того же экземпляра Лоадера. В чем бок ? Последний раз редактировалось switcher!; 12.07.2009 в 16:26. |
|
|||||
|
некрофил
Регистрация: Mar 2002
Адрес: ...по колено в кровище...
Сообщений: 2,292
|
Ну, выглядит всё нормально. Совет по стилю: объяви локальную переменную типа Loader и работай с ней, т.е.
Во-первых элементы массива для компилятора нетипизированы, а при работе с объявленной переменной мелкие ошибки, вроде опечаток, можно поймать на этапе компиляции. Во-вторых, работа с локальной переменной выполняется быстрее, чем доступ к элементам двумерного массива, даже если на таком простом коде никто и никогда не заметит разницы.
__________________
...убивать людей не удовольствия ради, но для еды. Последний раз редактировалось DeliMIter; 12.07.2009 в 19:09. |
|
|||||
|
Регистрация: May 2009
Сообщений: 220
|
сделал.
не помогает ни так: for (var i:uint=0; i<mapHeight; i++) { arrayMX[i] = new Array(); for (var j:uint=0; j<mapWidth; j++); { var tex:Loader = new Loader; var urlR:URLRequest = new URLRequest("pics/map_texture.jpg"); tex.load(urlR); tex.x = j*cellPixels; tex.y = i*cellPixels; arrayMX[i][j] = tex; map.addChild(arrayMX[i][j]); } } for (var i:uint=0; i<mapHeight; i++) { arrayMX[i] = new Array(); for (var j:uint=0; j<mapWidth; j++); { getLoadTex(); arrayMX[i][j] = tex; arrayMX[i][j].x = j*cellPixels; arrayMX[i][j].y = i*cellPixels; map.addChild(arrayMX[i][j]); } } function getLoadTex():Loader { var tex:Loader = new Loader; var urlR:URLRequest = new URLRequest("pics/map_texture.jpg"); tex.load(urlR); return tex; } for (var i:uint=0; i<mapHeight; i++) { for (var j:uint=0; j<mapWidth; j++); { trace (arrayMX[i][j]); } } бред какой-то... |
|
|||||
|
цикл пустой у тебя:
for (var j:uint=0; j<mapWidth; j++); то что ты предполагаешь в цикле выполняется только один раз с последним значением итератора Последний раз редактировалось silin; 12.07.2009 в 17:18. |
|
|||||
|
Регистрация: May 2009
Сообщений: 220
|
что у нас для внимательности принимают ?
![]() мне срочно надо в аптеку ![]() Всем спасибо! |
![]() |
![]() |
Часовой пояс GMT +4, время: 20:35. |
|
|
« Предыдущая тема | Следующая тема » |
|
|