Информация

Обсуждало 4 человека

FlashPlayer 11 MEGABAG!!!

Логика и программирование
18 февраля 2012 в 22:37:40

Наконец-то я раскрыл мего баг этого мего глюченного и лажового плеера. Он заключается в разном переводе координат из локальной системы в глобальную при смещении root. Для флеш плеера 10 правильный код:

root.x = 100;
root.y = -100;

var pos:Point = player.hit.localToGlobal(new Point(player.hit.x, player.hit.y));

if (level.hitTestPoint(pos.x, pos.y, true))
{
trace("Collide");
ind.visible = false;
}

Для флеш плеера 11 - мего ГОВНА:

root.x = 100;
root.y = -100;

var pos:Point = player.hit.localToGlobal(new Point(player.hit.x, player.hit.y));

if (level.hitTestPoint(pos.x - root.x, pos.y - root.y, true))
{
trace("Collide");
ind.visible = false;
}

Вот такой вот долбо*бизм.

Обсуждение (вниз)

Не хватает только вашего мнения. Зарегистрируйтесь, чтобы написать!

21 февраля 2012 в 15:07:22

Ну у меня же не 2 точки нужно программно добавить, а около 100.

21 февраля 2012 в 09:42:55

Я не смог представить вагон из винтиков. Это ж блин вагон, его можно одной картинкой нарисовать. Ну и колёса отдельно, чтоб крутились. И всё это счастье уже программно добавить, одной командой.

20 февраля 2012 в 21:44:06

sw_alex Ну а теперь представь что художник нарисовал пиксельный поезд каждый вагон которого состоит из винтиков - dot'ов, в одном вагоне около 6 частей винтиков, каждая часть состоит из 20 винтиков, причем они расположены именно так как их создал художник, а теперь представь что я программно добавляю каждый винтик в поезд... - это получается тупой, бессмысленный, рутинный труд.

20 февраля 2012 в 09:54:47

Ну лично мне больше нравится вариант, который озвучил Maldan - создать базовый MovieClip и цеплять на него через AddChild всё, что шевелится. И всё что не шевелится тоже. Тем более что я и так его использую.
Это и правда удобно, безглючно и не тормозит. А движения камеры можно сделать, просто меняя координаты x и y этого базового мувиклипа.
Что касается ссылки на базовый мувиклип - я делаю так: создаю глобальную переменную, в которую запихиваю адрес этого самого базового клипа. Ну вот в отдельном классе:

// Глобальные (общедоступные) переменные package { import flash.display.MovieClip; public class global { public static var masterClip:MovieClip; // Ссылка на основной мувиклип игры // constructor code public function global() { } } }


Всё. Теперь переменную global.masterClip можно получить отовсюду. Чем и пользуемся.
Ну а в самом базовом мувиклипе пишем так:
global.masterClip = this;


Ну и вызов чего-то из базового клипа:
global.masterClip.layer1.addChild(......);

19 февраля 2012 в 21:20:54

Баг исправлен.

19 февраля 2012 в 19:54:07

Баг не в функции localToGlobal а в функции hitTestPoint

19 февраля 2012 в 19:42:17

Какой другой нечо не заглючит блин

19 февраля 2012 в 19:36:48

Всё, я уже придумал мего крутую функцию debug11().

19 февраля 2012 в 16:29:19

Вот представь в версии 11.3 поравили тогда будет выполняться другой код и игра заглючит.

19 февраля 2012 в 00:58:58

Ты там чо Crysis 4 что ли пишешь? хД Я же тебе сказал введи проверки на версии плееров.

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


Допустим игра не работает в 11.1 плеер, сделай проверку если равен 11.1 то делат такой код иначе другой код, елси в 11.2 также же будет добавь к условию 11.2 кароче

if (version == 11.1 || version == 11.2)
{
новый код
} else {
старый код
}

и теперь даже если в 11.3 или 11.4 поправят это "баг" (может наоборот фича) то у тебя все равно будет работать

18 февраля 2012 в 23:53:28

ЭТО ЖЕ СКОЛЬКО ТАМ ВСЕГО ПЕРЕПИСАТЬ ПРИДЕТСЯ!!!!!!!!!!!!!!!!!! УЖАС!!!!!!!!!!!

18 февраля 2012 в 23:36:41

Или это может в 10 такой косяк?

18 февраля 2012 в 23:35:33

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

18 февраля 2012 в 23:34:14

да это скорее не 11 плеер говно, а реализация хД попробуй решить как-то иначе, либо сделай проверку на версии плеера, чтобы в 11 был новый метод просчета координат, а в предыдущих старый метод.

18 февраля 2012 в 23:31:47

Ну вот, а если root сместить то 11 говно плеер уже по другому координаты считает.

18 февраля 2012 в 23:27:53

аа ты имешь если в мувике уже есть мувик и нужно получить его координаты? ну тогда да нужен этот локалТуГлобал просто я такое некада неделал, у меня максимум в мувике мувик который не долже двигаться, лишь переключаться как анимация, но и это очень редко, я все больше на битмапках использую

18 февраля 2012 в 23:21:12

Ну и как из него тогда глобальные координаты достать если он уже в клипе сам создан а не через addChild?

18 февраля 2012 в 23:16:14

Мне важно создавать клип в клипе.


А в чем проблема? Класс может иметь разширение MovieClip и в нем через addChild можно создать еще один мувик и так далее

18 февраля 2012 в 23:10:19

"Жесть, ппц как все замудрено, не надо так задрачиваться, я вообще не разу не использовал localToGlobal какой бы сложности не был бы проект. Так как они просто напросто не нужен, да и root в АС3 это какая-то странность уже. Можно передать экземпляру создаваемого класса ссылку на основной класс и обращаться к нему без всяких этих переводов координат. Ну например главный класс Main ты в не создаешь класс пули, типа pula = new pula(this) то есть передал в класс пюля, экземпляр класса Main и в пуле уже можешь получить доступ к любому свтйоству главного класса, в том числе и его координаты."


Мне важно создавать клип в клипе.

Без обид, но зачем ты используешь root? o_O.... можно ведь нормальное свойство классу задать и с ним работать...


Более разумного способа для движения камеры я не придумал.

18 февраля 2012 в 22:54:21

Goli Молодец.

player.hit.localToGlobal(new Point(player.hit.x, player.hit.y));


Жесть, ппц как все замудрено, не надо так задрачиваться, я вообще не разу не использовал localToGlobal какой бы сложности не был бы проект. Так как они просто напросто не нужен, да и root в АС3 это какая-то странность уже. Можно передать экземпляру создаваемого класса ссылку на основной класс и обращаться к нему без всяких этих переводов координат. Ну например главный класс Main ты в не создаешь класс пули, типа pula = new pula(this) то есть передал в класс пюля, экземпляр класса Main и в пуле уже можешь получить доступ к любому свтйоству главного класса, в том числе и его координаты.

18 февраля 2012 в 22:45:55

Слово 'bug' пишется через 'u'.

18 февраля 2012 в 22:43:39

Без обид, но зачем ты используешь root? o_O.... можно ведь нормальное свойство классу задать и с ним работать...
Fundux.ru v.3.0 © 2006-2021 AleXNoD
Портал русских флеш игр и flash мультов