Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   Флейм (http://www.flasher.ru/forum/forumdisplay.php?f=53)
-   -   Как я чуть не сломал свой компьютер... (http://www.flasher.ru/forum/showthread.php?t=101015)

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

Цитата:

Сообщение от Seer
ну и? Всё правильо компьютер тебе выдавал.

Да ну?

Кстати, 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



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

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