Можно ли 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 |
заслуженный участник
Сейчас нет на сайте
|
Сегодня день прошёл не зря - узнал кое-что новое
Текущий проект: The Experiment ☭
Выпущенные проекты Steam: Princess.Loot.Pixel.Again Princess.Loot.Pixel.Again x2 Dungetris
|
|
| |