Форум 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=140422)

DenverZ 28.05.2010 18:18

вопрос про видимость
 
Здравствуйте

есть два класса:
первый это герой, в нем создается MovieClip героя и размещается по центру
второй класс это пули, там соответственнно создаются пули и привязываются к герою, т.е. стартовая точка, это координаты героя

если в классе пуль вызвать trace(hero.x, hero.y) то выводит 0, 0

соответственно если в классе героя создать или методы get для X, Y или две переменные типа
var X
var Y
и уже вызывать их в классе пуль, то координаты отдаются как положено по центру

как быть? неужели в других классах при передаче объекта hero придется обращаться не к его реальным x, y которые по умолчанию есть, а к созданным переменным X, Y ?

спасибо

КорДум 28.05.2010 18:29

localToGlobal

DenverZ 28.05.2010 18:46

что-то не разобрался я

Код AS3:

                public function Bullet(hero:MovieClip):void
                {
                        var pt:Point = new Point(hero.x, hero.y);
                        pt = hero.parent.localToGlobal(pt);
                        pt = hero.globalToLocal(pt);
 
                        trace(pt.x, pt.y);

как было 0,0 так и осталось...

gloomyBrain 28.05.2010 18:52

Создайте отдельные слои (сверху вниз) для:
- нашего персонажа
- пуль
- противников

Все это положите в один Sprite. Таким образом все перечисленные выше объекты будут иметь одну систему координат.

DenverZ 28.05.2010 18:52

мне кажется проще тогда в самом классе например героя, задать myX, myY переменные и к ним обращаться? короче получается вроде?

или я не понял все удобство localToGlobal ? как-то длинно получается и неудобно?

Добавлено через 48 секунд
Цитата:

Сообщение от gloomyBrain (Сообщение 911627)
Создайте отдельные слои (сверху вниз) для:
- нашего персонажа
- пуль
- противников

Все это положите в один Sprite. Таким образом все перечисленные выше объекты будут иметь одну систему координат.

я в классах пишу...

Добавлено через 1 минуту
объекты создаются программно из символов...

gloomyBrain 28.05.2010 19:03

Цитата:

я в классах пишу...
Good for you =)

Что Вам мешает создать класс World, в котором будет 3 приватных переменных типа Sprite? А в эти спрайты уже добавляем наши пули и персонажей

DenverZ 28.05.2010 19:05

2gloomyBrain поподробнее можно? :-) я новичок еще...

опять же, герой он один, но врагов и пуль будут сотни...

DenverZ 20.09.2010 16:12

2gloomyBrain поднимаю Вашу тему про отдельный спрайт в другом классе и единую систему координат

Вы не могли бы написать хотя бы небольшой пример, или на словах более подробно описать, как именно пользоваться Вашим советом, а именно как создать эту единую систему координат и главное из любого класса (врага или пули) взять например позицию героя по X и Y ?

заранее спасибо

P.S. если кто-то сможет описать подробно, буду очень благодарен

samana 20.09.2010 16:45

У вас класс "герой" в который вы помещаете ещё и клип героя, или просто клипу герой присвоен класс "герой"?

DenverZ 20.09.2010 17:05

у меня несколько классов,
тут суть немного в другом

есть главный класс

Код AS3:

package
{
        import flash.display.Sprite;
        import flash.events.*;
 
        public class TowerKiller extends Sprite
        {
                private var hero:Hero;
                public static var sWidth:int;
                public static var sHeight:int;
 
                public function TowerKiller()
                {                       
                        sWidth = stage.stageWidth;
                        sHeight = stage.stageHeight;
 
                        hero = new Hero();
                        hero.x = stage.stageWidth / 2;
                        hero.y = stage.stageHeight / 2;
 
                        addChild(hero);
                }
        }
}

класс героя, выполняет основные функции

Код AS3:

package
{
        import flash.display.MovieClip;
        import flash.events.*;
        import flash.utils.*;
 
        public class Hero extends MovieClip
        {
                public function Hero()
                {
                        hero = new MovieClip();
 
                        enemyLoader = new EnemyLoader();
                        addChild(enemyLoader);
 
                        enemyLoader.update(x, y);
                }
        }
}

классы сократил...

класс EnemyLoader подгружает данные врагов, в нем же создаются враги и заносятся в массив

Код AS3:

package
{
        import flash.display.MovieClip;
        import flash.events.*;
        import flash.utils.*;
 
        public class EnemyLoader extends MovieClip
        {               
                public function EnemyLoader()
                {
                        var enemy:Enemy = new Enemy(данные);
                        enemyList.push(enemy);
                }
 
                ВОТ НА ЭТОМ МЕСТЕ ОСНОВНАЯ БЕДА
                собственно проблема, в том, что enemy.x и enemy.y отдает нули
 
                public function update(heroX:int, heroY:int):void
                {
                        for (var i:int = 0; i < enemyList.length; i++)
                        {
                                var enemy:MovieClip = enemyList[i];
 
                                var dx:Number = enemy.x - heroX;
                                var dy:Number = enemy.y - heroY;
 
                                var dist:Number = Math.sqrt(dx * dx + dy * dy);
                                var cos:Number = dx / dist;
                                var sin:Number = dy / dist;
 
                                if (dist > enemy.speed)
                                {
                                        enemy.x -= enemy.speed * cos;
                                        enemy.y -= enemy.speed * sin;
                                }
                        }
                }
        }
}

красным в коде, я выделил где затыка
собственно метод update вызывается из класса Hero

вопрос в том, как правильно сделать, и главное грамотно, что бы из того же класса EnemyLoader получать координаты врагов, созданных в классе Enemy?

почему они по нулям?

надеюсь понятно объяснил


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

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