Просмотр полной версии : Обращение к родителю клипа из объекта класса
ashIndie
24.02.2012, 14:32
Ну в общем такая ситуация:
Делаю игру, есть некий класс юнита, обьект которого создается и туда передаются параметры определенные. Обьект содержит переменную clip:MovieClip. По запросу определенной функции этот клип например перемещается или меняется как-то, это по сути неважно. Интересует как мне обратиться к родителю этого мувика, чтобы например проверить карту проходимости, или узнать координаты других обьектов находящихся на уровне....Это моя первая игра в широком смысле, и хочется сделать все грамотно, чтобы потом не стыдно было за код да и изменить чтобы можно было что-то без головоломок и кучи времени.
Если непонятно описал спрашивайте.если надо выложу код класса
ashIndie
24.02.2012, 14:43
возвращает null. на это первым делом и надеялся))
ну так нужно дождаться добавления Event.ADDED
Если null, значит родителя нет. По-моему, очень даже логично.
ashIndie
24.02.2012, 15:09
Inet_PC, спасибо помогло
dimarik, да я понимаю, не понимал почему это происходит.
– Давай, сынок, иди!
– Папа, а слева есть стена?
– Да, сынок. Слева стена.
– Папа, а справа есть стена?
– Да, сынок, и справа стена.
– Папа, а впереди тоже стена?
– Да,сынок, и впереди стена.
– А че, сразу сказать куда идти – не мог?
– Есть такое слово, сынок – "Разработчик".
ashIndie
24.02.2012, 18:47
Новая проблема...пытаюсь реализовать данный алгоритм на AS 3.0, но в некоторых местах не пойму что имел ввиду автор.
источник:
http://xitri.com/2008/09/22/simple-engine-flash-game-top-view.html#comment-78710
Я нк пытаюсь сделать на всем готовеньком, вы меня поймите, но просто просидел уже не один час и зашел в тупик честно говоря. Буду очень рад если найдется ктото, кто поможет.
Вот собственно сам код:
step = 2;
onEnterFrame = function(){
var dx = _xmouse - man._x;
var dy = _ymouse - man._y;
//Направление (угол) к цели
var angle = Math.atan2(dy, dx);
var dist = Math.sqrt(dx*dx + dy*dy);
if(dist > step) {
//пробуем пройти напролом
tgtX = man._x + step * Math.cos(angle);
tgtY = man._y + step * Math.sin(angle);
if (!path.hitTest(tgtX, tgtY, true)){
//напролом не получилось, вычисляем базовое направление
var dAngle = dAngleRadian(direction, angle);
workAngle = angle + dAngle*.8;
//Шаг поворота - 10 градусов
for(var i = 0; i < 360; i += 10) {
for(var j = -1; j <= 1; j += 2) {
var a = workAngle + radian(i) * j;
var tempX = man._x + step * Math.cos(a);
var tempY = man._y + step * Math.sin(a);
if (path.hitTest(tempX, tempY, true)) {
//точка выхода найдена. Запоминаем ее и прерываем цикл
tgtX = tempX;
tgtY = tempY;
break;
}
}
}
}
var timeDx = tgtX - man._x;
var timeDy = tgtY - man._y;
//направление движения
direction = Math.atan2(timeDy, timeDx);
var dAngle = dAngleDegree(direction*180/Math.PI, man._rotation);
//поворячиваем клип к направлени движения на 5-ю часть
man._rotation += dAngle * .2;
man._x = tgtX;
man._y = tgtY;
man.play();
} else {
//стоим
man.gotoAndStop(5);
}
}
function dAngleRadian(a1, a2) {
var da = a1 - a2;
if (da > Math.PI) {
da = -Math.PI*2 + da;
} else if (da < -Math.PI) {
da = Math.PI*2 + da;
}
return da;
}
function dAngleDegree(a1, a2) {
var da = a1 - a2;
if (da > 180) {
da = -360 + da;
} else if (da < -180) {
da = 360 + da;
}
return da;
}
function degree(a) {
return a / Math.PI * 180;
}
function radian(a) {
return a / 180 * Math.PI;
}
нужен для того чтобы юнит обходил препятствия, но в некоторых местах я не понимаю что имеется ввиду, да и написан он на старом языке, так что переменная может использоваться у него до обьявления или обьявляться дважды....
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.