Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   проблема с обращением к массиву (http://www.flasher.ru/forum/showthread.php?t=127613)

kosmo_mishka 18.07.2009 14:48

проблема с обращением к массиву
 
Хочу сделать определение столкновений шейпфлегом но не получается обращение к массиву

вот сам массив

Код AS1/AS2:

var hitPoints = new Array(i);
hitPoints.push({x:1, y: 26});
hitPoints.push({x:19, y:32});
hitPoints.push({x:1, y:1});
hitPoints.push({x:24, y:1});

Вот шейпфлэг (кстати если изменить на определение одной точки то все работает например
Код AS1/AS2:

 
this.hitTest(_root.ship._x + 19, _root_ship._y + 20, true)

)



Код AS1/AS2:

if (this.hitTest(_root.ship._x+_root.ship.hitPoints[i].x, _root.ship.y+_root._ship.hitPoints[i].y, true))
{
trace("shapeflagHit");
}

ошибка в синтаксисе, но я только начал пользоваться ас2, и не могу найти, спасибо за помощь

etc 18.07.2009 14:49

kosmo_mishka, отредактируйте свой пост и оформите код тегами [as][/as].

kosmo_mishka 18.07.2009 14:55

отредактировал
а еще хотел спросить, вот шейпфлег с линией толщиной hairline работает не всегда, есть решение этой проблемы?
Ощущение как будто не хватает частоты кадров, хотя пробовал аж до 80 fps ставить...

iNils 18.07.2009 20:59

_root и root не одно и тоже

kosmo_mishka 18.07.2009 22:29

пардон исправил... (копировал с другого форума где этот вопрос задавал, там никто не ответил, и там при создания поста потерялись некоторые знаки)

ну то есть не от этого не работает

iflamberg 18.07.2009 22:35

ошибка в синтаксисе? какая ошибка-то?

kosmo_mishka 07.08.2009 20:56

неужели никто не знает?

Xero201 08.08.2009 01:12

Цитата:

Сообщение от kosmo_mishka (Сообщение 836453)
Я имел ввиду что я неправильно написал массив и незнаю как правильно...
или можно так
Код AS1/AS2:

var hitPoints = new Array();


так и сделай
Цитата:

Сообщение от kosmo_mishka (Сообщение 836453)
потом в классе Ship
надо ли переменную делать public и обозначать что это класс[/as]

Поясни, о каком именно классе ты говоришь? Если о MovieClip, т.е. ship у тебя клип, то никаких пабликов в нем делать не надо. Но перед тем, как обращаться к переменным внутри такого клипа, ты должен убедиться, что они успели проинициализироваться (похожая тема недавно поднималась здесь)
Даже если ты не добавляешь ship с помощью attachMovie, все равно нужно время.
Можешь проверить это написав так:
Код AS1/AS2:

mc = _root.ship;
trace("Before > "+mc.hitPoints[1].x);
mc.onEnterFrame = function () {
        if(this.hitPoints != undefined) {
                trace("After > "+this.hitPoints[1].x);
                delete this.onEnterFrame;
        }
}

И раз уж на другом форуме код теряется, то будь добр добавляй на другие форумы код из "первоисточника", тогда может и отвечать будут охотнее.

kosmo_mishka 08.08.2009 18:10

Прочитал тему ту тему, не очень понял про то как проверить успевают ли переменные иницилизироваться...
Если можно поподробней.

Удалил пост с не очень правильным кодом.
Вот я переписал.
Класс ship
Код AS1/AS2:

 
          public var hitPoints:Array;
        public var i;
 
        function onLoad()
        {       
                        var hitPoints = new Array();
                        hitPoints.push({x:1, y:30});
                        hitPoints.push({x:30, y:1});
                        hitPoints.push({x:30, y:30});
                        hitPoints.push({x:1, y:1});
          }

Класс border
Код AS1/AS2:

if (this.hitTest(_root.ship._x+_root.ship.hitPoints[i].x, _root.ship._y+_root.ship.hitPoints[i].y, true))
                        {
                                        trace("hit");
                        }

А вот шейпфлег с одной точкой работает
Код AS1/AS2:

                                if (this.hitTest(_root.ship._x+1, _root.ship._y+1, true))
                                {
                                                trace("hit");
                                }

Добавлено через 11 минут
Добавил в екшнскрипт кадра код который ты предложил для проверки, трейсом вывелось
Before > undefined
если честно я не очень улавливаю суть.

Xero201 09.08.2009 12:13

Цитата:

Сообщение от kosmo_mishka (Сообщение 841429)
Прочитал тему ту тему, не очень понял про то как проверить успевают ли переменные иницилизироваться...

Ну если у тебя ship не клип (т.е. класс типа MovieClip), а обычный класс, тогда та тема действительно неуместна. Просто ты делаешь проверку на столкновение, и я подумал что ship - это клип.

Цитата:

Сообщение от kosmo_mishka (Сообщение 841429)
Класс ship
Код AS1/AS2:

           public var hitPoints:Array;
        public var i;
 
        function onLoad()
        {       
                        var hitPoints = new Array();
                        hitPoints.push({x:1, y:30});
                        hitPoints.push({x:30, y:1});
                        hitPoints.push({x:30, y:30});
                        hitPoints.push({x:1, y:1});
          }


Я сам не силен в классах AS 2.0., но конструкторы в них точно не так создаются. А слово "var" вообще делает переменную локальной в области фигурных скобок "{ }". Так что у тебя получатся просто два массива.
Вот рабочий код:
Код AS1/AS2:

var        hitPoints = new Array();        //массив который потом можно будет присвоить переменной класса
        hitPoints.push({x:1, y:30});
        hitPoints.push({x:30, y:1});
        hitPoints.push({x:30, y:30});
        hitPoints.push({x:1, y:1});
 
function ClassShip():Void{        //типо такой конструктор
                this.hitPoints = hitPoints;
                //если не создавать массив отдельно, то можно сделать так
                //this.hitPoints = new Array();       
                //this.hitPoints.push({x:1, y:30});
                //this.hitPoints.push({x:30, y:1});
                //и т.д.
 
}
var ship= new ClassShip();//создаем экземпляр класса
//тест
for(i=0;i<ship.hitPoints.length;i++){
        trace("x="+ship.hitPoints[i].x+" y="+ship.hitPoints[i].y);
}



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

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