Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   работа с классами (http://www.flasher.ru/forum/showthread.php?t=180513)

Партизан 04.06.2012 16:09

Еще раз....
Код AS3:

dynamic public class ArrayPole extends Array
 
for (var yy:int = 0; yy < sizey ; yy++) {
        this[yy] = new ByteArray;
        for (var xx:int = 0; xx < sizex ; xx++) {
                this[yy][xx] = 0;
        }
}
 
 
// в Main
var pole:ArrayPole = new ArrayPole(5,5);
trace(pole[2][0]);


Svoy4 04.06.2012 16:17

pole.length пишет ноль

Добавлено через 1 минуту
почти цикл в конструкторе
public function ArrayPole(sizey:int, sizex:int):void

Добавлено через 3 минуты
да с this захлебнулся на уровне создания-заполнения еще в классе

Партизан 04.06.2012 16:28

Вот так должен выглядеть ваш класс
Код AS3:

package
{
        import flash.utils.ByteArray;
 
        public dynamic class ArrayPole extends Array
        {
 
                public function ArrayPole(sizex:int, sizey:int)
                {
                        for (var yy:int = 0; yy < sizey; yy++)
                        {
                                this[yy] = new ByteArray;
                                for (var xx:int = 0; xx < sizex; xx++)
                                {
                                        this[yy][xx] = 0;
                                }
                        }
 
                }
 
        }
 
}

А вот так вы должны его создавать:
Код AS3:

var pole:ArrayPole = new ArrayPole(5, 5)
trace(pole.length) // 5


Svoy4 04.06.2012 16:31

в SVoyGame/ArrayPole.as
Код AS3:

package  SVoyGame 
{
        import flash.utils.ByteArray;
 
        public class ArrayPole extends Array
        {
                public function ArrayPole(sizey:int, sizex:int):void
                {
                        for (var yy:int = 0; yy < sizey ; yy++) {
                                ArrayPole[yy] = new ByteArray;
                                for (var xx:int = 0; xx < sizex ; xx++) {
                                        ArrayPole[yy][xx] = 0;
                                }
                        }
              trace(ArrayPole[2][2]);// выводит инфу

в основном тексте использую Main.as
Код AS3:

package 
{
        import flash.display.Sprite;
        import flash.events.Event;
        import SVoyGame.ArrayPole;
 
        public class Main extends Sprite
        {
                public function Main():void
                {
                        var pole:ArrayPole;
                        trace(pole[2][2]);// вот в этом месте и возникает ошибок

[Fault] exception, information=ReferenceError: Error #1069: Не удалось найти свойство 0 в SVoyGame.ArrayPole; отсутствует значение по умолчанию.

Добавлено через 2 минуты
UOTE=Партизан;1082854]Вот так должен выглядеть ваш класс
Код AS3:

package
{
        import flash.utils.ByteArray;
 
        public dynamic class ArrayPole extends Array
        {
 
                public function ArrayPole(sizex:int, sizey:int)
                {
                        for (var yy:int = 0; yy < sizey; yy++)
                        {
                                this[yy] = new ByteArray;// вот здесь уже ошибка - пишет компилятор

[/quote]

Добавлено через 7 минут
соврал
не там ошибка

Добавлено через 9 минут
в функции конструктора есть еще функция
в ней к ArrayPole тоже обращать через this или ArrayPole

Добавлено через 22 минуты
Код AS3:

PlusOne(yy, xx );
function PlusOne(y:int, x:int):void {
if (y<size) {
...
                                if (this[y][x] < 255) { // [Fault] exception, information=TypeError: Error #1010: Термин не определен и не имеет свойств.
 
                                        this[y][x]++;
                                }
                        }

ArrayPole - тоже не работает

Добавлено через 28 минут
ага проблема в функциях внутри конструктора
// закоментировал одну в другой проблема
- они не видят массив

Партизан 04.06.2012 17:11

почитайте вот тутклассы

Svoy4 04.06.2012 17:12

выкинул их за пределы конструктора (модифицировал осуществлением передачи size)
все заработало как надо
объясните пожалуйста в чем проблема была

in4core 04.06.2012 17:15

Код AS3:

var pole:ArrayPole;
                        trace(pole[2][2])

Вот в этом. Вы не создавали экземпляр

Svoy4 04.06.2012 17:19

канчно new arraypole
надо читать меж строк

in4core 04.06.2012 17:24

Цитата:

надо читать меж строк
А может еще и алхимимей заняться? Тут форум, а не шарады

Svoy4 04.06.2012 17:29

))
там не код был представлен
а рассуждения действий
а если рядом код взглянуть то всё на месте
так что придирки к словам

Добавлено через 1 минуту
конечно же я только учусь и мож не правильным словарем пользуюсь

Добавлено через 14 минут
вернемся к теме
выкинул их(функции которые были внутри конструктора) за пределы конструктора (модифицировал осуществлением передачи size)
все заработало как надо
объясните пожалуйста в чем проблема была
разве нельзя объявлять функцию внутри функции
и если можно то почему внутренняя функция не видит переменные главной


Часовой пояс GMT +4, время: 04:55.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.