Вторник, 24 Декабря 2024, 01:57

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

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Можно ли gamemaker создавать переменные сам?
GoldAppleДата: Суббота, 28 Марта 2015, 14:45 | Сообщение # 1
частый гость
Сейчас нет на сайте
Можно ли gamemaker создавать переменные сам? Например, ты указал какое кол-во переменных надо создать, а GM сделал их.
Или список переменных, чтобы из можно было использовать в дальнейшем.
Например, мне надо n-е кол-во слов, а потом в сплывающем окне показать все эти слова.


Сообщение отредактировал GoldApple - Суббота, 28 Марта 2015, 14:50
ИнтернетДата: Суббота, 28 Марта 2015, 14:48 | Сообщение # 2
постоянный участник
Сейчас нет на сайте
-

Сообщение отредактировал Интернет - Суббота, 28 Марта 2015, 15:10
EfimovMaxДата: Суббота, 28 Марта 2015, 14:55 | Сообщение # 3
заслуженный участник
Сейчас нет на сайте
Если я правильно тебя понял, то тебе нужны массивы. Этот код создаст 100 пустых переменных, 57 индексу присвоит текст 'это 57 индекс'

Код
i=1
repeat 100
      {
      peremennya[i]=noone
      i+=1
      }
peremennya[57]='это 57 индекс'


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

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


Сообщение отредактировал EfimovMax - Суббота, 28 Марта 2015, 14:57
YellowAfterlifeДата: Суббота, 28 Марта 2015, 15:50 | Сообщение # 4
Сейчас нет на сайте
Если нужен список значений, использовать вышеупомянутые массивы.
Еще про массивы:

  • Достаточно присвоить значение в "последнюю" ячейку - остальные будут заполнены нулями,
    array[99] = 0 // array[0..99] автоматически будут установлены в 0 при выделении памяти
  • Есть двухмерные массивы (см. справку)
  • Если используете GameMaker: Studio, можно даже записывать один массив в другой массив.

Если нужен список соответствий (например, слов и выдаваемых за них очков), логичнее взять ds_map.


EfimovMaxДата: Суббота, 28 Марта 2015, 15:59 | Сообщение # 5
заслуженный участник
Сейчас нет на сайте
Цитата YellowAfterlife ()
Достаточно присвоить значение в "последнюю" ячейку - остальные будут заполнены нулями,
array[99] = 0 // array[0..99] автоматически будут установлены в 0 при выделении памяти

Это где ты такое вычитал? GM не создаёт автоматом предыдущие индексы массива. Код array[99] = 0 создаст только один элемент массива с индексом 99 и значением 0.
Пользуйтесь только достоверными источниками


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

Выпущенные проекты Steam:
Princess.Loot.Pixel.Again
Princess.Loot.Pixel.Again x2
Dungetris
YellowAfterlifeДата: Суббота, 28 Марта 2015, 16:29 | Сообщение # 6
Сейчас нет на сайте
Цитата EfimovMax ()
Это где ты такое вычитал? GM не создаёт автоматом предыдущие индексы массива. Код array[99] = 0 создаст только один элемент массива с индексом 99 и значением 0.
Пользуйтесь только достоверными источниками

В GameMaker не бывает "дыр" в массивах. Если запись происходит за границу массива, массив расширяется (происходит пере-выделение памяти под него) и все "новые" ячейки обнуляются,
arr[9] = 1
for (var i = 0; i < 10; i += 1) {
show_message("arr[" + string(i) + "] -> " + string(arr[i]))
}

отобразит серию 0 и 1 в конце, без ошибок.

Что смешно, в предоставленной ссылке на документацию описывается эта же концепция (поиск по фразе "You will notice that the array has been initialised backwards"), и все примеры кода в документации инициализируют массивы задом наперед, поскольку
for (var i = 0; i < 100; i += 1) arr[i] = 0
Уничтожит и выделит массив заново 100 раз. И время выполнения растет с каждой новой итерацией, поскольку памяти выделять и освобождать нужно все больше и больше.

Ну и раз уж мы заговорили о критике кода, хотелось бы заметить, что инициализировать массив значениями "noone" - сомнительная идея, потому что noone это просто спец. константа, равная -4.


EfimovMaxДата: Суббота, 28 Марта 2015, 16:37 | Сообщение # 7
заслуженный участник
Сейчас нет на сайте
YellowAfterlife,

Код
Array[999]='Ты не прав'

if Array[998]='Сам проверь' game_end()


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

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


Сообщение отредактировал EfimovMax - Суббота, 28 Марта 2015, 16:38
YellowAfterlifeДата: Суббота, 28 Марта 2015, 16:48 | Сообщение # 8
Сейчас нет на сайте
Цитата EfimovMax ()

Код
Array[999]='Ты не прав'

if Array[998]='Сам проверь' game_end()

Сравнение строкового значения с числом выдает ошибку. Ты читал текст ошибки? В GMS оно даже отчетливо говорит "Invalid comparison type" (неправильный тип сравнений).
Можно с таким же успехом написать "if 0='Сам проверь' { }" и говорить, что в GameMaker не работают сравнения.


Array[999] = ''
if (Array[998] == 0) {
show_message("What are you doing with your life.")
}




Сообщение отредактировал YellowAfterlife - Суббота, 28 Марта 2015, 16:49
EfimovMaxДата: Суббота, 28 Марта 2015, 16:54 | Сообщение # 9
заслуженный участник
Сейчас нет на сайте


Сегодня день прошёл не зря - узнал кое-что новое smile


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

Выпущенные проекты Steam:
Princess.Loot.Pixel.Again
Princess.Loot.Pixel.Again x2
Dungetris
  • Страница 1 из 1
  • 1
Поиск:

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