Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   API приложений и сред (http://www.flasher.ru/forum/forumdisplay.php?f=61)
-   -   Получение координат клика мышей. (http://www.flasher.ru/forum/showthread.php?t=196481)

wapmaster 25.03.2013 15:29

Получение координат клика мышей.
 
Здравствуйте.
Появилось у меня задание сделать простенькую игру с использованием 3д движка на во флеше.
В качестве движка был выбран Away3D.
Игра это копия игры Osmos на мобильных платформах, то есть есть некие объекты которые свободно двигаются и большие объекты поглощают меньшие и вырастают в размерах. Еще есть собственно игрок который играет одним из таких вот объектов. Для передвижения игрока нужно в любом месте экрана кликнуть мышей и объект игрока должен переместиться на определенное расстояние по вектору проходящему от точки клика мышей до точки цента объекта.

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

vorodis2 25.03.2013 16:14

http://away3d.com/forum/viewthread/4079/
Получение точки в 2д координатах.

Получение точки на общей сцене, а точка находиться в контейнер/контейнер/ до 5 штук
Код AS3:

/**
                * Приводит точку до низа
                * @param        object3d контейнер в котором есть точка3д ObjectContainer3D //Mesh
                * @param        veCmaxX сама точка
                * @param        sah сколько контейнеров назад до 5
                */

                static public function poiskNewPoint3D(object3d:ObjectContainer3D, veCmaxX:Vector3D, sah:int=5):Vector3D {
                        var vertor:Vector3D = new Vector3D(veCmaxX.x,veCmaxX.y,veCmaxX.z);                       
                        var sss:int = 0;                       
                        if(object3d.parent!=null){
                                vertor = object3d.transform.deltaTransformVector(vertor);
                                vertor.x += object3d.x;
                                vertor.y += object3d.y;
                                vertor.z += object3d.z;
                                sss++;
                                if (object3d.parent.parent != null&&sss<=sah) {
                                        vertor = object3d.parent.transform.deltaTransformVector(vertor);
                                        vertor.x += object3d.parent.x;
                                        vertor.y += object3d.parent.y;
                                        vertor.z += object3d.parent.z;       
                                        sss++;
                                        if (object3d.parent.parent.parent != null&&sss<=sah) {
                                                vertor = object3d.parent.parent.transform.deltaTransformVector(vertor);
                                                vertor.x += object3d.parent.parent.x;
                                                vertor.y += object3d.parent.parent.y;
                                                vertor.z += object3d.parent.parent.z;
                                                sss++;
                                                if (object3d.parent.parent.parent.parent != null&&sss<=sah) {
                                                        vertor = object3d.parent.parent.parent.transform.deltaTransformVector(vertor);
                                                        vertor.x += object3d.parent.parent.parent.x;
                                                        vertor.y += object3d.parent.parent.parent.y;
                                                        vertor.z += object3d.parent.parent.parent.z;
                                                        sss++;
                                                        if (object3d.parent.parent.parent.parent.parent != null&&sss<=sah) {
                                                                vertor = object3d.parent.parent.parent.parent.transform.deltaTransformVector(vertor);
                                                                vertor.x += object3d.parent.parent.parent.parent.x;
                                                                vertor.y += object3d.parent.parent.parent.parent.y;
                                                                vertor.z += object3d.parent.parent.parent.parent.z;
                                                                sss++;
                                                                if (object3d.parent.parent.parent.parent.parent.parent != null&&sss<=sah) {
                                                                        vertor = object3d.parent.parent.parent.parent.parent.transform.deltaTransformVector(vertor);
                                                                        vertor.x += object3d.parent.parent.parent.parent.parent.x;
                                                                        vertor.y += object3d.parent.parent.parent.parent.parent.y;
                                                                        vertor.z += object3d.parent.parent.parent.parent.parent.z;                                                                       
                                                                }
                                                        }
                                                }                                               
                                        }                                       
                                }                       
                        }
 
 
 
 
 
 
                        return vertor;
                }


Sintesis 26.03.2013 04:11

Код AS3:

object3d.parent.parent.parent.parent.parent.parent

жееесть, никогда так не делайте.

vorodis2 26.03.2013 12:42

Почему, код рабочий, выдают то что мне нужно, то что не красиво, ну я как ни бить переживу ))
А как бы Вы поступили в данном коде???????.

Sintesis 26.03.2013 16:29

Цитата:

Сообщение от vorodis2 (Сообщение 1126851)
то что не красиво, ну я как ни бить переживу ))

Ты переживёшь, а компьютеры укакиваться будут переваривать это за доли секунды. С таким подходом тормозов в программе не избежать.
Много вложенных if - плохо, обращение к методу или переменной класса глубже, чем на один этаж очень плохо - не правильная архитектура, то-есть myClass.myFunc.myFunc; уже считается плохо, а такой поезд .parent.parent.parent.parent.parent.parent это совсем не годится. Но ещё хуже, что обращения идут от ребёнка к родителю, это запрещено в ООП.

AlexLucas 26.03.2013 17:36

А если задача изменится, и контейнеров станет не 5 а 20 ?
Дело не в некрасивости и том что ООП что-то там запрещает, а в том что решение недостаточно гибкое.

GBee 26.03.2013 17:42

Призываем рекурсию.

vorodis2 26.03.2013 20:39

//GBee Что такое рекурсия?
//AlexLucas в рамках моей задачи у меня не может быть больше пяти, по этому это не моя проблема))) можно конечно замкнуть функции на себе, типа
Код AS3:

static public function poiskNewPoint3D(object3d:ObjectContainer3D, veCmaxX:Vector3D, sah:int=5):Vector3D {
        var vertor:Vector3D = new Vector3D(veCmaxX.x,veCmaxX.y,veCmaxX.z);                       
        var sss:int = 0;                       
        if(object3d.parent!=null){
                vertor = object3d.transform.deltaTransformVector(vertor);
                vertor.x += object3d.x;
                vertor.y += object3d.y;
                vertor.z += object3d.z;
                sss++;
                if (object3d.parent.parent != null && sss <= sah) {
                        poiskNewPoint3D(object3d.parent, vertor);
                }else {
                        return vertor;
                }
        }
        return vertor;
}
}

ХЗ должно работать, но я не люблю такого, так как функция создают сама себя, а я не особо уверен что она после себя ничего не оставляет, в плане мусора, короче мне спокойней когда она одна)))))))))

//Sintesis Еще раз повторю свой вопрос, как бы Вы реализовали, задачу: Есть в 3д сена.обьект.обьект...точка3д ко всем объектам возможно применины трансформации, как получить сена.точка3д.
/////////////////////////////////
а такой поезд .parent.parent.parent.parent.parent.parent это совсем не годится. Но ещё хуже, что обращения идут от ребёнка к родителю,
//////////////////////////////////
Если вы сможете реализовать это
без parent
меньшим количеством if
С меня пиво, когда буду в Запорожье)))))

///это запрещено в ООП. ////Пофиг, оно работает))))

AlexLucas 26.03.2013 21:13

Где-то прочитал, что приложение cтоит разрабатывать учитывая то что те люди которые его будут после вас поддерживать, являются психами которые в приступе гнева способны убить, и которые знают где вы живёте.
В таком случае, я думаю у вас шанс выжыть был бы минимален :)

vorodis2 26.03.2013 21:22

))))))))))))))))))))))))))))))))) Да я прекрасно понимаю чувства того, кто ни будет знать что их можно делать только меньше 5, я бы и сам захотел бы узнать свой адрес))))))))))))))))))))))


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

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