PDA

Просмотр полной версии : Как я чуть не сломал свой компьютер...


Psycho Tiger
09.09.2007, 15:52
История, произошедшая со мной 5 минут назад...
Все как обычно, захожу в флэш, начинаю писать там программу...
Тут на определенной стадии мне потребовалось не просто обнаружить столкновение 2 кругов, но и сторону, с которой это произошло.
Пишу функцию, обьявляю в ней переменные, делаю все как обычно.
Тут и начались непоняные вещи. Компьютер мне выдавал вот что:

var a=1;
var b=a;
a=2;
trace(b); //выдает 2

Ну думаю, с чего то у меня прописалась ссылка на обьект, начал думать и пробовать разные вещи...
Думал часа эдак 2, меня начало уже колотить) Думал задать вопрос... но как то тема глупая, во флэше не 1 день и такие вопросы... просидел ещё часок... был готов убить свой компьютер. И вдруг случайно увидел, что я компилил все под АС 1. Поставил 2, все заработало на ура.
Мораль: проверяй блин, настройки публиша

Seer
09.09.2007, 15:58
ну и? Всё правильо компьютер тебе выдавал.

etc
09.09.2007, 16:10
Повторить сей спец-эффект не удалось.

Psycho Tiger
09.09.2007, 16:10
Я не про то :))
Мораль прочитай, и не повторяй моих ошибок... (меня все ещё трясет)

2 __etc


function collision(ball:Object,obj:Object){
if (dist(ball._x,obj._x,ball._y,obj._y)<(obj._width+ball._width)/2){
var side=dist(obj._x+obj._width/2,ball._x,obj._y,ball._y); //правая
var type:String="r"; //right
var oldSide=side;
side=Math.min(side,dist(obj._x-obj._width/2,ball._x,obj._y,ball._y)); // в сайд у нас координаты левой\правой стороны, какая больше.
trace ("Side="+side+", Oldside="+oldSide);
if (oldSide!=side) type="l";
}
}


function dist(x1,x2,y1,y2){ //растояние между 2 любыми точками
return Math.round(Math.sqrt(Math.abs(x1-x2)*Math.abs(x1-x2)+Math.abs(y1-y2)*Math.abs(y1-y2)));
}

this.onEnterFrame=function(){
c=collision(ball,obj);
}
startDrag(ball,true);


2 Шара, ball был меньше шара obj

Подносим болл к обж - с левой стороны все нормально, с правой они равны.

iNils
09.09.2007, 16:20
ну и? Всё правильо компьютер тебе выдавал.
Да ну?

Кстати, Math.abs в dist совсем лишний, x1-x2 возводится в квадрат и знак роли не играет.

Psycho Tiger
09.09.2007, 17:01
Кстати верно... что то я про это совсем забыл)

Mr. Fixit
09.09.2007, 17:46
чет я не понял...
у меня что в ас1, что в ас2:

trace(b); //выдает 1

Psycho Tiger
09.09.2007, 17:55
Нет, я же привел код из функции...
Возможно это мой мозг тупил, но то что я опубликовал в 1 посте было лишь следствием того, что должно было быть.
Протестируйте мой 2 пост, в ас 1 при приближении ball к obj, а точнее к его правому краю, и происходит что то вроде a=2=b=1...

__i
11.09.2007, 01:04
во флеше есть такое правило - строки, числа, и булевые данные пердаються как значение. Остальные (те которые объекты) передаются/хранятся как ссылки на объекты (а не значения)
этот код

var a=1;
var b=a;
a=2;
trace(b); //выдает 2

никогда не будет работать как ты описал
а вот этот будет

var a= {1 : 1};
var b=a;
a["1"] = 2;
trace(b["1"]); //выдаCт 2