Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   Одинаковые вычисления для большого кол-ва объектов. (http://www.flasher.ru/forum/showthread.php?t=90585)

FluFf 14.01.2007 17:46

Одинаковые вычисления для большого кол-ва объектов.
 
У меня много планет, для которых рассчитывается скорость, сила(между всеми планетами), расстояние... ну например 3 обьекта: 1,2 и 3...
Код:

rx_12 = 1._x - 2._x;
ry_12 = ...
r_12 = Math.sqrt(rx_12*rx_12+ry_12*ry_12);
так же для обьектов 2 и 3
rx_23 = 2._x - 3._x;
ry_23 = ...
и для 1 и 3...

но если я создам 4 обьекта, то таких вычислений будет 6... а я хочу чтобы в самом начале можно было создать сколько угодно таких обьектов, и программа должна сама создать для них код заменяя 1 и 2 на номера клипов... как это сделать? И еще, как в степень возводить?

iNils 14.01.2007 18:00

1. Название клипов не должны начинаться с цифры, пусть будет так: mc1, mc2, mc3, ....
2. Тогда все будет выглядить так
Код:

function getDistance (mc1:MovieClip, mc2:MovieClip):Number {
        var dx:Number = mc1._x - mc2._x;
        var dy:Number = mc1._y - mc2._y;
        var r:Number = Math.sqrt (dx * dx + dy * dy);
        return r;
}
r12 = getDistance (mc1, mc2);
r23 = getDistance (mc2, mc3);
r13 = getDistance (mc1, mc3);

3. В степень возводится с помощью
Код:

Math.pow (число, степень)
Однако, если нужно возвести в квадрат, то лучше использовать простое перемножение, так как это будет происзводится быстрее, чем через Math.pow

FluFf 15.01.2007 03:15

Но мне все равно придется прописывать заранее
r12 = getDistance (mc1, mc2);
r23 = getDistance (mc2, mc3);
r13 = getDistance (mc1, mc3);
а потом еще силу, угол между каждыми телами... а как сделать, чтобы все это прописывалось для любого количества обьектов? т.е. если я создам 30 обьектов, то программа должна написать для всех расстояние, силу и.т.д.

etc 15.01.2007 11:09

Использовать классы для этого :)

whiteRed 15.01.2007 12:17

можно сделать примерно так:
Код:

for(i=1; i<=n; i++){
  for(j=i+1; j<=n; j++){
    this["r"+i+"_"+j] = getDistance(this["mc"+i], this["mc"+j]);
  }
}

но лучше все таки классы

FluFf 15.01.2007 21:12

А можно поподробнее про классы? Даже не слышал о них...

FluFf 16.01.2007 01:16

большое спасибо... все сделал спомощью циклов... только вот в таймере не получается сделать... т.е.
Код:

for(i=1; i<=n; i++){
  for(j=i+1; j<=n; j++){
    this["r"+i+"_"+j] = getDistance(this["mc"+i], this["mc"+j]);
  }
}

это работает, а если это запихать в функцию и присвоить ее таймеру, то ниче не работает...


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

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