Понедельник, 30 Декабря 2024, 18:57

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
проблема с классом
шмыгаДата: Понедельник, 21 Марта 2011, 16:00 | Сообщение # 1
постоянный участник
Сейчас нет на сайте
Вобщем есть класс с именем mainn

Code
class mainn{
  public var index:Number;
  var count:Number=0;
  var dep:Number
  var activ:Number;
  var btn:Array = new Array();

  function mainn(act,dept){
   activ=act;
   dep=dept;
   }

  function addMC(MC){
   var cl=new pole();
   btn.push({mc:MC,c:cl});
   trace("btn.length="+btn.length)
   count++;
   }
}

создаю два обьекта класса mainn - c именами player1 и player2
далее вызываю функцию класса которая должна в массив btn добавлять мувие клип - player1.addMC(g1)
проблема в том что мувие клип добавляется в массив обоих обьектов класса player1, и player2. Получаеться что для двух обьектов класса массив btn является общим. Кто обьяснит что я делаю неправильно?

Добавлено (21.03.2011, 16:00)
---------------------------------------------
Вобщем с проблемой разобрался, но появилась новая. Проблема с проверкой на столкновение.

Есть массив с пулями. При смене кадра для каждой пули (через цикл) вызываю функцию проверки на столкновение
В фунцию передаю сам мувик пули и индек ячейки массива, которая содержит эту пулю

Code

function chek(MC,j)
{
   var i=count;
    while (i--)
  {
  if(MC.hitTest(btn[i].mc)){trace("стлокнулась пуля №"+j)}
  }
}

hitTest почему то работает только в том случае если столкновение происходи поочередно с 1 созданной пули и т.д.
Т.е. если первая пуля не попала в мишень, а вторая и третья попали hitTest не сработает.

В чем проблема, помогите плз.

noTformaTДата: Понедельник, 21 Марта 2011, 16:37 | Сообщение # 2
Ukrainian independent game developer
Сейчас нет на сайте
Quote (шмыга)
while (i--)

странное условие цикла


@noTformaT
KamskiiДата: Понедельник, 21 Марта 2011, 18:03 | Сообщение # 3
Game ≠ Toy
Сейчас нет на сайте
Quote (noTformaT)
странное условие цикла

Согласен, какой смысл этого цикла?
шмыгаДата: Понедельник, 21 Марта 2011, 18:35 | Сообщение # 4
постоянный участник
Сейчас нет на сайте
Quote (noTformaT)
странное условие цикла

разници никакой нету. Я мог бы задать цикл и так:

Code
function chek(MC,j)   
{   
    for(var i=0;i<btn.length;i++){
    {   
    if(MC.hitTest(btn[i].mc)){trace("стлокнулась пуля №"+j)}   
    }   
}

Ничего не измениться.
И кстати заметил что при отлавливании столкновения обьектов, hitTest перестает себя одекватно вести, если отлавливается столкновение между клипами двух массивов. Т.е.

for (i=0;i<massA.length;i++)
{
for (j=0;j<massB.length;j++)
{
if(massA[i].hitTest(massB[j])){trace("произошло столкновение")}
}
}

Сообщение отредактировал шмыга - Понедельник, 21 Марта 2011, 18:41
KamskiiДата: Понедельник, 21 Марта 2011, 18:43 | Сообщение # 5
Game ≠ Toy
Сейчас нет на сайте
Quote (шмыга)
i<btn.length

Тебе нужно перебрать все пули. Тогда почему условие в цикле для длины кнопки? Да и в trace используется переменная j.
шмыгаДата: Понедельник, 21 Марта 2011, 18:58 | Сообщение # 6
постоянный участник
Сейчас нет на сайте
обьясняю подробно есть функция в которой через цикл каждую ракету перемещаю:

Code
function remove(deg,rot){
    
    
   for (var j=0;j<countF;j++){
      
     roket[j].grav+=.5;
     roket[j].poteria+=0.05;
     roket[j]._x+=Math.cos(roket[j].deg)*roket[j].speed-roket[j].poteria;
     ...
      
     ...
     _root.igroki[vrag].chek(roket[j],j); // здесь я вызываю ту самую фунцию проверки столкновения .
      
     }

Сама функция :

Code
function chek(MC,j)    
{    
     for(var i=0;i<btn.length;i++){  
     {    
     if(MC.hitTest(btn[i].mc)){trace("стлокнулась пуля №"+j)}    
     }    
}

где btn - массив с мувие клипами с которыми должно проверяться столкновение с ракетами.

noTformaTДата: Понедельник, 21 Марта 2011, 20:12 | Сообщение # 7
Ukrainian independent game developer
Сейчас нет на сайте
Макс, второй вариант нормальный но цикл while (i--) толком работать не будет, чем тебе второй вариант мешает?

@noTformaT
шмыгаДата: Четверг, 24 Марта 2011, 16:37 | Сообщение # 8
постоянный участник
Сейчас нет на сайте
while (i--) работает отменно, так же как и for проверь на досуге biggrin

Quote (noTformaT)
чем тебе второй вариант мешает?

тем что он не хочет работать!!
Пришлось заняться мазахизмом и написать вот такой корявый код,
function chek(MC,j){
var i=count;
while (i--)
{
if((btn[i].mc._x<MC._x+MC._height/2) && (btn[i].mc._x>MC._x-MC._height/2)&&(btn[i].mc._y<MC._y+MC._width/2) && (btn[i].mc._y>MC._y-MC._width/2))
{
trace("попал в цель №"+i+"ракетой №"+j)
}
}
}
но он меня к сожалению не устраивает, т.к. ХОЧУ ЧЕРЕЗ hitTest !!!!!!!!

Добавлено (24.03.2011, 16:37)
---------------------------------------------
Решил все таки начать потихоньку изучать AS3 и о ужас, он сходу начал выедать мне мозг!!!!

А точнее:
Создал класс main в нем есть конструктор который должен при создании вывести сообщение

Code
class main{
  function main(){
   trace(класс созданc");
   }
  }

далее в первом кадре пишу скрипт
var nn= new main();

компилирую - результат:

1180: Call to a possibly undefined method main.

  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг