Top.Mail.Ru
Ответы
Аватар пользователя
Изменено
Аватар пользователя
Аватар пользователя
Программирование
+1

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

Показывает ошибку:


___________________________________________
############################################################################################
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)


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

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
 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); 
 
 
По дате
По рейтингу
Аватар пользователя
Новичок

## Ошибка в GameMaker 2:

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

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

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

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

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

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


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

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

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

123456789101112
 // В 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,

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

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

**Надеюсь, эта информация поможет вам решить проблему.**

Аватар пользователя
Мастер

гадания в другом разделе. без скрина не поймет никто