Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Нужна помощь в Game Maker 2. (Я новичок)

XFaster Ученик (245), закрыт 1 месяц назад
Показывает ошибку:


___________________________________________
############################################################################################
ERROR in
action number 1
of Draw Event
for object Obj_textbox:

Variable Obj_textbox.textbox_x_offset(100111, 0) not set before reading it.
at gml_Object_Obj_textbox_Draw_64 (line 83) - draw_sprite_ext(txtb_spr, txtb_img, textbox_x + textbox_x_offset[page], textbox_y, textbox_width/txtb_spr_w, textbox_height/txtb_spr_h, 0, c_white, 1);
############################################################################################
gml_Object_Obj_textbox_Draw_64 (line 83)


Как это исправить? Исходник диалогов:

 accept_key = keyboard_check_pressed(vk_space);  " !!!!!!!!!!!!! 

textbox_x = camera_get_view_x( view_camera[0] );
textbox_y = camera_get_view_y( view_camera[0] ) + 144;


//----------------сетуп
if setup == false
{


setup = true;
draw_set_font(global.font_main);
draw_set_valign(fa_top);
draw_set_halign(fa_left);

//искать текст
page_number = array_length(text);
for(var p = 0; p < page_number; p++)
{

text_length[p] = string_length(text[p]);

//позиция х
//не чара
text_x_offset[p] = 44;


}
}



//-------------набор текста
if draw_char < text_length [page]
{
draw_char += text_spd;
draw_char = clamp(draw_char, 0, text_length[page]);
}


//--------------пролистывания страницы
if accept_key
{

//набор текста завершён
if draw_char == text_length[page]
{

//следующая страница
if page < page_number = -1
{
page++;
draw_char = 0;
}
//умирай textbox !!!!!!!!!!
else
{
instance_destroy();
}

}
//не закончило печатать
else
{

draw_char = text_length[page];

}





}


//-----------рисовашка текстового поля :3--------------
txtb_img += txtb_img_spd;
txtb_spr_w = sprite_get_width(txtb_spr);
txtb_spr_h = sprite_get_height(txtb_spr);
//рисовашка задней части текст бокса
draw_sprite_ext(txtb_spr, txtb_img, textbox_x + textbox_x_offset[page], textbox_y, textbox_width/txtb_spr_w, textbox_height/txtb_spr_h, 0, c_white, 1);


//РИСУЙ ТЕКСТ!!!!!!
var _draw_text = string_copy(text[page], 1, draw_char);
draw_text_ext(textbox_x + textbox_x_offset[page] + border, textbox_y + border, _drawtext, line_sep,line_widht);

Лучший ответ
ChatGPT 4o Мастер (1662) 1 месяц назад
## Ошибка в GameMaker 2:

**Анализ ошибки:**

Сообщения об ошибке говорит, что переменная `textbox_x_offset` в объекте `Obj_textbox` используется до того, как ей было присвоено значение. Это происходит в `Draw Event` (строка 83), где вы пытаетесь получить доступ к `textbox_x_offset[page]`.

**Возможные причины и решения:**

1. **Неинициализированный массив:**

- Если `textbox_x_offset` объявлен как массив, но не инициализирован значениями для каждой страницы, он будет содержать неопределенные элементы.
- **Решение:**
- Во время создания объекта или в `Create`-событии объекта `Obj_textbox` инициализируйте `textbox_x_offset` желаемыми значениями для каждой страницы:

 textbox_x_offset = [44, 88, 132]; // Assuming specific offsets for each page  

2. **Неверная индексация страницы:**

- Переменная `page` может быть установлена неправильно при доступе к `textbox_x_offset[page]`.
- **Решение:**
- Убедитесь, что `page` имеет допустимый индекс в диапазоне длин ваших массивов `text` and `textbox_x_offset`.

**Исправленный код (устраняет обе потенциальные причины):**

 // В Create-событии объекта Obj_textbox (или во время создания объекта): 
textbox_x_offset = [44, 88, 132]; // Assuming specific offsets for each page

// В Draw-событии объекта Obj_textbox:
// ... (другой код)

// Убедитесь, что page находится в допустимом диапазоне (assuming text and textbox_x_offset have same number of elements)
page = clamp(page, 0, array_length(text) - 1);

draw_sprite_ext(txtb_spr, txtb_img, textbox_x + textbox_x_offset[page], textbox_y, textbox_width/txtb_spr_w, textbox_height/txtb_spr_h, 0, c_white, 1);

// ... (другой код)

**Объяснение:**

1. **Инициализация:** Массив `textbox_x_offset` теперь инициализируется с specific offsets for each page during object creation (or in the `Create` event).
2. **Индексация страницы:** Переменная `page` ограничивается допустимым диапазоном (от 0 до number of pages minus 1), чтобы гарантировать, что она не будет

**Дополнительные советы:**

- Рассмотрите использование структуры данных, как struct или dictionary, для хранения информации, связанной с textbox,

**Помните:**

- Тщательно тестируйте свой код после внесения изменений.
- Используйте комментарии, чтобы сделать код более читаемым.

**Надеюсь, эта информация поможет вам решить проблему.**
Остальные ответы
Елизавета???? Профи (993) 1 месяц назад
гадания в другом разделе. без скрина не поймет никто
Похожие вопросы