Вторник, 22 Октября 2019, 19:13

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

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Форум игроделов » Конструкторы игр и лёгкие в освоении системы разработки игр » Adobe Flash и Создание флэш-игр » Почему массив остается без изменений?
Почему массив остается без изменений?
GavolotДата: Вторник, 03 Июля 2012, 00:11 | Сообщение # 1
Последователь Тени
Сейчас нет на сайте
Просто у меня все так устроено, что мне надо чтобы массив в функции, который передается в нее как параметр изменялся прямо во время функции, но и чтобы функция возвращала int значения.
Code

function razdiRnd(Colode:Array):int
{
    var elementRnd_R:int = Math.random()*Colode.length;
   var el_R:int = 0;
     if (Colode.length > 3)
     {
   while(elementRnd_R == 0 || tempRnd_R == elementRnd_R )
   {
    elementRnd_R = Math.random()*Colode.length-1;
   }
     }
     else
     elementRnd_R = Colode.shift();
     
   trace(elementRnd_R);
   tempRnd_R = elementRnd_R;
   //Кое-как с костылями мы добились нормальной работы
   //Вытягивания "случайной" карты, пока элементов не
   //становится 3
     
   if (Colode.length>3)
   {
   el_R = Colode[elementRnd_R];
   return el_R;//Вместо показа карты мы возвращаем карту
   Colode.splice(elementRnd_R, 1);
   }
   else
   return elementRnd_R;//Альтернативный возврат карты
     
     
     
   rezTxt.text = Colode.toString();
}


Сколько не пытался, он изменять массив после выполнения функции отказывается. Да там есть костыли, но с другой кнопкой оно работает нормально, та другая кнопка можно сказать копия этой функции только используется в событии щелчка мыши для вытягивания из колоды случайной карты, а эту я сделал для раздачи карт по 6 двум игрокам, пробовал удалять вытянутый элемент сразу после выполнения функции получилось не очень, не сработало, поэтому надо чтобы массив менялся после выполнения функции и все будет без багов...

Добавлено (03.07.2012, 00:11)
---------------------------------------------
И документацию от Адобы и Колина я читал уже. Там вроде сказали, если объект не примитивный, то оно будет меняться, массив не примитивный объект, но не меняется он после выполнения функции.


В общем что-то делаю, но пока не пойму ни как :)
Тень - выражение основной сущности человека.


Сообщение отредактировал Gavolot - Вторник, 03 Июля 2012, 00:00
iLORdДата: Вторник, 03 Июля 2012, 00:31 | Сообщение # 2
заслуженный участник
Сейчас нет на сайте
Не особо вдуплил логику кода... Ты передаёшь какой-то массив как аргумент функции и хочешь, чтобы функция меняла этот изначальный массив, так? Но она меняет только локальный массив Colode, но не изначальный? Если так, то, по-моему, так и должно быть) Почему бы не работать напрямую с массивом, вместо того, чтоб передавать его как аргумент?

Bread Games - пилим ураганный экшен!
GavolotДата: Вторник, 03 Июля 2012, 00:40 | Сообщение # 3
Последователь Тени
Сейчас нет на сайте
iLORd, Там не много проблема с тем чтобы с ним на прямую работать =))) я понимаю, что придется наверное отказаться от функции, но хотелось бы блин, чтобы функция его меняла зараза такая. =) Так получится не удобно.

В общем что-то делаю, но пока не пойму ни как :)
Тень - выражение основной сущности человека.
iLORdДата: Вторник, 03 Июля 2012, 00:45 | Сообщение # 4
заслуженный участник
Сейчас нет на сайте
Quote (Gavolot)
Там не много проблема с тем чтобы с ним на прямую работать =)))

Как?! Как ты это сделал?) А сделать временную переменную не получается тоже?


Bread Games - пилим ураганный экшен!
GavolotДата: Вторник, 03 Июля 2012, 00:49 | Сообщение # 5
Последователь Тени
Сейчас нет на сайте
iLORd, ну там такая фишка, что придется либо кучу кода делать с кучей костылей, либо все переписывать и прийти к тому-же самому =)))
Пытаюсь раздавать из колоды случайную карту, вижу что как-то не получается, буду наверное раздавать по старому методу, одна-вторая-одна-вторая...
Ведь на кнопку "Вытянуть" у меня получилось вытягивать одну карту из колоды правильно, проверял =)
Слушай а нельзя как-то в ас3 искусственно вызвать пользовательское событие? Ну чтобы программа сама кликнула на кнопку?


В общем что-то делаю, но пока не пойму ни как :)
Тень - выражение основной сущности человека.


Сообщение отредактировал Gavolot - Вторник, 03 Июля 2012, 00:49
iLORdДата: Вторник, 03 Июля 2012, 00:53 | Сообщение # 6
заслуженный участник
Сейчас нет на сайте
Quote (Gavolot)
Слушай а нельзя как-то в ас3 искусственно вызвать пользовательское событие? Ну чтобы программа сама кликнула на кнопку?

Не встречал такого...

А как в кнопке всё может работать, а в функции - нет? о_О Покажи, что делает кнопка, что ли)


Bread Games - пилим ураганный экшен!
GavolotДата: Вторник, 03 Июля 2012, 00:53 | Сообщение # 7
Последователь Тени
Сейчас нет на сайте
iLORd, А у тебя нема флеша? Я бы кинул хоть ролик или исходник чтобы поглядел, он весит не много если роликом. Хоть поймешь о чем это я тут =)

В общем что-то делаю, но пока не пойму ни как :)
Тень - выражение основной сущности человека.
iLORdДата: Вторник, 03 Июля 2012, 00:56 | Сообщение # 8
заслуженный участник
Сейчас нет на сайте
Флеш есть, но я сейчас не с основного компьютера, заценить всё смогу не раньше среды.

Bread Games - пилим ураганный экшен!
GavolotДата: Вторник, 03 Июля 2012, 00:59 | Сообщение # 9
Последователь Тени
Сейчас нет на сайте
iLORd, Не ну там надо не заценивать =) А просто посмотреть, потому-что на заценку еще долго тянуть не будет, пока эта игруха не попадет в текстовый квест как мини игра.

Добавлено (03.07.2012, 00:59)
---------------------------------------------
А вот это кнопка:

Code

//Вытягивание случайной карты из колоды
function vytiRnd(e:MouseEvent):void
{
  var elementRnd:int = Math.random()*Coloda.length;
  var el:int = 0;
    if (Coloda.length > 3)
    {
  while(elementRnd == 0 || tempRnd == elementRnd )
  {
   elementRnd = Math.random()*Coloda.length-1;
  }
    }
    else
    elementRnd = Coloda.shift();
   
  trace(elementRnd);
  tempRnd = elementRnd;
  //Кое-как с костылями мы добились нормальной работы
  //Вытягивания "случайной" карты, пока элементов не
  //становится 3
   
  if (Coloda.length>3)
  {
  el = Coloda[elementRnd];
  Carta.gotoAndStop(el);
  Coloda.splice(elementRnd, 1);
  }
  else
  Carta.gotoAndStop(elementRnd);
   
   
   
  rezTxt.text = Coloda.toString();
}

Я не зря говорил, что использовал тот же код.


В общем что-то делаю, но пока не пойму ни как :)
Тень - выражение основной сущности человека.
iLORdДата: Вторник, 03 Июля 2012, 01:12 | Сообщение # 10
заслуженный участник
Сейчас нет на сайте
Ну, в одном случае у тебя внешняя переменная Coloda, а в другом - внутренняя Colode. Что может мешать обращаться в первом случае тоже к массиву, я не могу даже вообразить)

Bread Games - пилим ураганный экшен!
GavolotДата: Вторник, 03 Июля 2012, 01:49 | Сообщение # 11
Последователь Тени
Сейчас нет на сайте
та тут такая фишка, что событийные функции работают как функции, которые нормально изменяют Coloda, а обычные функции не хотят ее менять.

Добавлено (03.07.2012, 01:49)
---------------------------------------------
Я в принципе решил проблему проще, массив все равно перемешивается, поэтому я раздаю карты по простому принципу человека, первую первому игроку, вторую второму и там пока у них по шесть не будет, зато с этим проблем нету.


В общем что-то делаю, но пока не пойму ни как :)
Тень - выражение основной сущности человека.
Форум игроделов » Конструкторы игр и лёгкие в освоении системы разработки игр » Adobe Flash и Создание флэш-игр » Почему массив остается без изменений?
  • Страница 1 из 1
  • 1
Поиск:

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