Массив Game Maker Studio 2 принимает неправильные значения

Привет, ребята, я новичок в 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);
    }
}

person Jimmy Musser    schedule 28.05.2020    source источник
comment
Переменная _i в oRespond, кажется, мало что делает. Вы ничего там не забыли?   -  person Steven    schedule 10.09.2020


Ответы (1)


Хорошо, я думаю, что увижу много проблем с вашим кодом.

Прежде всего, поскольку массивы в GM динамические, объявите их как

line_array[3]

это плохая практика (на мой взгляд)

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

Во-вторых, я не очень понимаю логику вашего кода, всегда создавайте объекты, по крайней мере, в среде GM, которые соответствуют физическим объектам, я бы сделал объект для Гражданского, но не для ответа.

Я много раз проверял ваш код, и, поскольку никто не ответил вам в течение 3 месяцев, я могу предположить, что это потому, что никто не может по-настоящему понять ваш способ кодирования, и этот способ кодирования, вероятно, доставит вам много проблем в будущем. То, что вы пытаетесь сделать, может быть очень простым, если делать это с хорошей иерархией.

Я хотел бы помочь вам с этим кодом, но я нахожу его очень хаотичным.

Если вы не решили эту проблему, напишите комментарий :)

Я советую вам полностью повторно реализовать его, даже если все равно будет решено.

person Edoardo Rosso    schedule 13.09.2020