Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Вопрос про координаты (x y) (http://www.flasher.ru/forum/showthread.php?t=144764)

DenverZ 20.09.2010 19:21

Вопрос про координаты (x y)
 
Здравствуйте,
решил спросить на примере, как мне получить x и y

главный класс TestPoint

Код AS3:

package
{
        import flash.display.*;
        import flash.geom.*;
 
        public class TestPoint extends Sprite
        {
                var test1:Test1;
 
                public function TestPoint()
                {
                        test1 = new Test1();
 
                        addChild(test1);
 
                        trace(test1.x, test1.y);
                }
        }
}

Класс Test1

Код AS3:

package
{
        import flash.display.*;
 
        public class Test1 extends MovieClip
        {
                var test1:MovieClip;
 
                public function Test1()
                {
                        test1 = new mc1();
                        test1.x = 100;
                        test1.y = 100;
 
                        addChild(test1);
                }
        }
}

mc1() это просто фигура (круг), которая находится в библиотеки проекта

вопрос в следующем,
в главном классе я вызываю trace(test1.x, test1.y) и мне пишется 0 0

я понимаю, т.к. главная сцена находится в координатах 0 0, но как мне вытащить координаты круга (того, который создается в классе Test1) ???

подскажите плиз на примере, желательно с примером правильного кода

спасибо

КорДум 20.09.2010 19:26

Так у вас вложенность какая? Смотрите сами: test1.test1
Все правильно, первый test1 лежит в (0, 0), а test1 в нем лежит в (100, 100), ясно? Вы берете координаты не того объекта и зачем-то создали вложенность.

Код AS3:

package
{
        import flash.display.*;
 
        public class Test1 extends MovieClip
        {
 
                public function Test1() {
                        this.x = 100;
                        this.y = 100;
                }
        }
}


DenverZ 20.09.2010 19:35

угу эту ошибку я уже понял, видимо уже голова не варит

но тогда вопрос такой,
я собственно видимо не верно привел пример, расскажу на словах

есть объект (герой), он стреляет, создаются пули, их много
каждый созданный объект пули (bullet = new Bullet()) добавляется в массив
после чего происходит проверка каждой пули по массиву (на попадание), собственно у пуль надо брать их текущие координаты относительно сцены...

просто как я это вижу

Класс героя, в нем создается в цикле (например 10 пуль) объект пули
while (limi--)
{
bullet = new Bullet();
массив.push(bullet)
addChild(bullet)
}

прошу прощения за цикл, просто для краткости

а в классе пуль Bullet уже на сцену добавляются сами пули из обхектов библиотеки
bullet = new mc_myBullet();
bullet.x = координата например кончика пушки героя и y тоже самое
addChild(bullet)

и собственно как в этом случае быть? как мне в классе героя, когда я буду перебирать массив пуль, брать их координаты?

Добавлено через 4 минуты
КорДум, скажите, в моей первом примере получается класс Test1 Должен выглядеть вот так?

Код AS3:

package
{
        import flash.display.*;
 
        public class Test1 extends MovieClip
        {
                var object:MovieClip;
 
                public function Test1()
                {
                        object = new mc1();
                        this.x = 100;
                        this.y = 100;
                        addChild(object);
                }
        }
}

объект MovieClip надо же сделать и добавить на сцену
верно?

samana 20.09.2010 19:57

Цитата:

Класс героя, в нем создается в цикле (например 10 пуль) объект пули
while (limi--)
{
bullet = new Bullet();
массив.push(bullet)
addChild(bullet)
}
Почему пули вы создаёте в классе героя и добавляете их к нему? Не понимаю. Это отдельные элементы и не должны зависеть от героя.
Если это у вас всё не в документ классе, то тогда вам нужно создать класс уровня например Level1 и в него поместить героя, и когда надо пули.

DenverZ 20.09.2010 20:09

с примерами бы =)
новичкам трудно понять некоторые вещи, в голове реальная каша

мне уже советовали про класс уровня (мир), но я не понял как это сделать, и пример не показали :-(

samana 20.09.2010 20:25

Просто представьте, что герой и всё остальное будет находится в пустом муви-клипе по именем Level1, так же как они сейчас находятся на TimeLine - который тоже самый настоящий муви-клип. А вы полностью делаете игру на классах, или у вас главный код в кадрах, а класс пули просто создали для удобства?

DenverZ 20.09.2010 20:32

нет, я полностью делаю на классах
основной класс это TowerKiller (он же как Вы называете уровень)
класс героя это Hero
класс пуль это BulletLoader, у него есть еще один класс Bullet
BulletLoader подгружает данные их XML, после чего в цикле создает из класса Bullet пули и помещает их в массив
есть класс EnemyLoader и Enemy для загрузки данных врагов и создания врагов

на TimeLine ничего нет, я сразу отказался от программирования на временной шкале, т.к. для более мения серьезного проекта, это неудобно и не профессионально...

Добавлено через 43 секунды
Забыл сказать
в классе TowerKiller добавляется в addChild только герой
а вот в классе героя, уже идет управление всем...

samana 20.09.2010 20:45

Но если вы всё добавляете в класс героя, то как оно работает? Наверняка ваш герой ходит туда-сюда, получается с ним одновременно так же ходит всё вокруг... Наверно я что-то не понял...

DenverZ 20.09.2010 20:59

герой это башня которая стреляет
Вы видимо не поняли...

вот тут http://www.flasher.ru/forum/showthread.php?t=140422 вконце темы, я пример привел небольшой, надеюсь более понятно будет :-)

КорДум 20.09.2010 23:49

Итак, сами посудите: глупо, что герой является мозгом игры. Герой же не обдумывает, что пуля должна войти в стену, отскочить и свалиться воооон у того угла? Он же не должен знать, что сейчас думает монстр, куда бы ему свалить в кучу трупы прошлых "героев", верно же? Герой умеет только стрелять, ходить и смежные действия. О другом он не должен задумываться вообще.
Да, вам следует создавать пули в объекте Мир, а пули, в свою очередь, не должны думать о стороннем вообще тоже. Они только летят и проверяются на столкновение со стенами. Они не должны знать, что думает слесарь Вася - главный босс игры. Герой, в свою очередь, не должен знать как и куда летят пули. Это пули контролируют свои действия.
Вы должны делать логически обособленные объекты, иначе получится нечто вроде "сидение от унитаза управляет бочком и сливом".

Добавлено через 9 минут
И да, я вот честно, не знаю, какое самое нормальное решение для проверки хитТеста обособленных объектов между другими объектами. Читал, что самое то - использовать сетку. То есть, грубо говоря, пуля летит, она знает, в каком она квадратике, далее идет проверка, есть ли кто в этом квадратике, если есть - проверка на хитТест между теми, кто там есть. Логика ясна? Я на деле никогда не пробовал, как-то от игрушек отошел уже очень давно.


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

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