Привет, ребята, я новичок в Game Maker Studio и плохо знаком с языком. Я делаю игру и работаю над диалоговой системой. Этот фрагмент кода был разработан для того, чтобы персонажи реагировали на набор вариантов, диалог начинается с печати первого элемента line_array, что он и делает, а затем дает игроку выбор из двух ответов из response_array, который вместо этого распечатывает второй элемент line_array, и я не понимаю, почему. Аргумент содержит только один элемент массива? Я инициализирую два массива в объекте oCivilian2 и проталкиваю их через код DialogueCode, связанный с другим объектом oRespond, который должен позволить мне просеивать диалоги в игре. Все помогает, спасибо
Он инициализируется здесь при создании oCivilian2
line_array = [3];
line_array[0] = "Ethan it's good to see you! \n I thought after the incident well.... \n well I thought we had lost you";
line_array[1] = "I've said too much";
line_array[2] = "You hit your head trying to saver her\n It was horrible";
response_array = [2];
response_array[0] = "What happened?";
response_array[1] = "I don't recall alot. How bad was it?";
counter = 0;
x1 = RESOLUTION_W / 2;
y1 = RESOLUTION_H -70;
x2 = RESOLUTION_W/2;
y2 = RESOLUTION_H;
_print = "";
responseSelected = 0;
Затем шаг, который связывает его с DialogueCode при нажатии пробела
keyActivate = keyboard_check_pressed(vk_space);
if (keyActivate) {
var inst = collision_rectangle(oPlayer.x+3,oPlayer.y+3,oPlayer.x-3,oPlayer.y-3, oCivilian2, false, false);
if (inst != noone) {
ScriptExecuteArray(DialogueCode, line_array);
ScriptExecuteArray(DialogueCode, response_array);
}
}
Затем до шага в объекте oRespond
lerpProgress += (1 - lerpProgress) / 50;
textProgress += global.textSpeed;
x1 = lerp(x1, x1Target,lerpProgress);
x2 = lerp(x2, x2Target,lerpProgress);
keyUp = (keyboard_check_pressed(vk_up)) || (keyboard_check_pressed(ord("W")))
keyDown = keyboard_check_pressed(vk_down) || keyboard_check_pressed(ord("S"));
responseSelected += (keyDown - keyUp);
var _max = 2;
var _min = 0;
if (responseSelected > _max) responseSelected = _min;
if (responseSelected < _min) responseSelected = _max;
for (var i = 0; i < 2; i++) {
var _marker = string_pos(",", response);
if(string_pos(",",response)) {
responseScript[i] = string_copy(response,0,_marker);
string_delete(response,0,_marker);
var _marker = string_pos(",", response);
} else {
responseScript[i] = string_copy(response,0, string_length(response));
}
}
if(keyboard_check_pressed(vk_space))
{
counter++;
}
Затем распечатать в oRespond
/// text
//response
NineSliceBoxStretched(sTextBox, x1,y1,x2,y2, 0);
draw_set_font(fText);
draw_set_halign(fa_center);
draw_set_valign(fa_top);
draw_set_color(c_black);
if (counter % 2 == 0)
{
var _i = 0;
var _print = string_copy(text,1,textProgress);
draw_text((x1+x2)/2, y1+8, _print);
draw_set_color(c_white);
draw_text((x1+x2) /2, y1+7, _print);
_i++;
} else {
if (array_length_1d(responseScript) > 0) {
var _print = "";
for (var t = 0; t < array_length_1d(responseScript); t++)
{
_print += "\n";
if (t == responseSelected) _print += "--> "
_print += responseScript[t];
show_debug_message(responseScript[t]);
if (t == responseSelected) _print += " <-- "
}
draw_text((x1+x2)/2, y1+8, _print);
draw_set_color(c_white);
draw_text((x1+x2) /2, y1+7, _print);
}
}