Воскресенье, 22 Декабря 2024, 14:00

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

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Поиск существующих предметов
MrSlapДата: Вторник, 12 Мая 2015, 21:27 | Сообщение # 1
почетный гость
Сейчас нет на сайте
Снова здравствуйте. В очередной раз нахожусь в ситуации, где ответ ускользает от меня...

В игре планируется открывать различные виды оружия. Есть список weapon - где по порядку указаны волыны от худшей к лучшей.
Есть проверка f_weapon[weapon] - которая должна определять наличие такого оружия в "инвентаре". Ну и нажатием клавиши 1 герой должен получать следующее доступное оружие.
Допустим, что у героя есть в наличии 1, 2 и 5 вид оружия (f_weapon[1]=1 и так с 2 и 5).
Как бы выдавать эти пушки в том же порядке, минуя пустые "ячейки"? При том, что пролистав все ячейки weapon опять равен 0 - без оружия.


Создаю интерактивную повесть.
EfimovMaxДата: Вторник, 12 Мая 2015, 23:19 | Сообщение # 2
заслуженный участник
Сейчас нет на сайте
В Create:
Код

f_weapon[0]=1
f_weapon[1]=0
f_weapon[2]=0
f_weapon[3]=0
f_weapon[4]=1
f_weapon[5]=1
NowWeapon=0


В Step:
Код

if keyboard_check_pressed(ord('1'))     
    {
    NowWeapon+=1
    if NowWeapon>5 NowWeapon=0     
    while f_weapon[NowWeapon]=0     
       {     
       NowWeapon+=1     
       }     
    }


Текущий проект: The Experiment ☭

Выпущенные проекты Steam:
Princess.Loot.Pixel.Again
Princess.Loot.Pixel.Again x2
Dungetris


Сообщение отредактировал EfimovMax - Вторник, 12 Мая 2015, 23:28
MrSlapДата: Вторник, 12 Мая 2015, 23:34 | Сообщение # 3
почетный гость
Сейчас нет на сайте
EfimovMax, что подразумевает под собой NowWeapon? да и подсчитать количество доступных пушек не пробелма. Проблема в том, чтобы параметр weapon присваивал поочерёдно только те f_weapon, которые равняются 1. Минуя те, которые идут с нулями. Ну, чтобы если f_weapom [1-3]=0, а f_weapom [4]=1, то нажав vk_1 он бы сразу перескочил на 5 значение. Я уже трёхэтажную фигню нарисовал, и всё равно где-то не могу досмотреть момент...

Код
for (w=0 w<14 w+=1)
    {
    if f_weapon[w]=1 //если волына под номером w присутствует
       {
       for (e=0 e<14 e+=1)
       {
       enabled[e]=w //присвоить её порядковый номер переменной enable - реестр доступных пух.
       break;
       }
       }
    }
if keyboard_check_pressed(key[9])
       {
       weapon=enabled[next] //пуха равна первой в списке доступных пух
       next+=1
       }


получается enabled принимает значение последнего оружия в списке. Не могу понять, как бы мне поочерёдно то его выстроить. Брейк там будет лишний, тогда w применит только первое значение. А надо все по очереди. Чую - не хватает куска кода, который бы рассортировал мои f_weapon по порядку в enable.


Создаю интерактивную повесть.
EfimovMaxДата: Вторник, 12 Мая 2015, 23:41 | Сообщение # 4
заслуженный участник
Сейчас нет на сайте
С поставленной задачей мой код справляется, если так уж принципиально, то замени NowWeapon на weapon.
Код с проверкой:

Код

if keyboard_check_pressed(ord('1'))    
       {
       NowWeapon+=1
      if NowWeapon>5 NowWeapon=0    
       while f_weapon[NowWeapon]=0    
          {    
          NowWeapon+=1    
          }    
       show_message('Чему равняется NowWeapon:   ' + string(NowWeapon) + '#Чему равняется f_weapon с индексом NowWeapon:   ' + string(f_weapon[NowWeapon]))
       }


Текущий проект: The Experiment ☭

Выпущенные проекты Steam:
Princess.Loot.Pixel.Again
Princess.Loot.Pixel.Again x2
Dungetris


Сообщение отредактировал EfimovMax - Вторник, 12 Мая 2015, 23:43
MrSlapДата: Вторник, 12 Мая 2015, 23:50 | Сообщение # 5
почетный гость
Сейчас нет на сайте
EfimovMax, а, и правда. Спасибо. Ща вкручу его в код, посмотрим, как зачирикает.

Создаю интерактивную повесть.
EfimovMaxДата: Вторник, 12 Мая 2015, 23:52 | Сообщение # 6
заслуженный участник
Сейчас нет на сайте
MrSlap, там осторожней - если все f_weapon[] будут равняться нулю, то получится бесконечный цикл smile

Текущий проект: The Experiment ☭

Выпущенные проекты Steam:
Princess.Loot.Pixel.Again
Princess.Loot.Pixel.Again x2
Dungetris
MrSlapДата: Среда, 13 Мая 2015, 00:16 | Сообщение # 7
почетный гость
Сейчас нет на сайте
EfimovMax, хм, а если нет положительных значений, выскакивает ошибка, и если последнее не положительно - тоже ошибка.
Цитата
Push :: Execution Error - Variable Index [0,15] out of range [1,15] - -5.f_weapon(100071,15)
at gml_Script_scr_HUD (line 73) - while f_weapon[weapon]=0

Та же ошибка, если последнее значение не является единицей. А если всё по нолям, но последнее 1, то цикл останавливается на последнем значении и не идёт в ноль. Странно.

Добавлено (13 мая 2015, 00:13)
---------------------------------------------
EfimovMax, а, не заметил коммент. А если туда докрутить брейк какой-нибудь, типа после перечисления всех значений - брейк?

Добавлено (13 мая 2015, 00:16)
---------------------------------------------
EfimovMax, ага, вот так:

Код
if keyboard_check_pressed(key[9])     
        {
        weapon+=1
        if weapon>14 weapon=0    
        while f_weapon[weapon]=0     
           {     
           weapon+=1
           if weapon>14 {weapon=0 break;}
           }
        }


Заработало во всех вариациях.


Создаю интерактивную повесть.
  • Страница 1 из 1
  • 1
Поиск:

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