а , точно. Я обычно вары не использую , и поэтому не могу сказать то , что с ними может быть не так. Я бы лучше все переменные , объявил бы заранее в create , особенно если их немного. Там , типа: global.O=0 global.X=0 global.Y=0
В справке есть вот такая надпись: Не пытайтесь использовать эту переменную при работе с другим объектом (или другим экземпляром этого объекта) потом.
CreatingOver, Вот не поставил break , я только что , и сразу косяк вылетел не приятный... Какого-то хрена , нижние переменные объявились тогда , когда должны были объявиться верхние. Как вы без break и скобок все делаете?O_o Я только забуду поставить ,и у меня сразу начинаются неприятности.
switch Scene3{ case 1: _1_punkt_text='Огонь' _1_punkt_D=0 _2_punkt_text='Буран' _2_punkt_D=0 _3_punkt_text='Молния' _3_punkt_D=0 _4_punkt_text='Удары земли' _4_punkt_D=0 _5_punkt_text='Психоз' _5_punkt_D=0 _6_punkt_text='Назад' _6_punkt_D=0 scr_dialog(xx,yy,text_window,30,text3_1,10,6,1,10,200,1,40,0,0,c_black,c_white) switch _Current_Punkt{ case 1: Scene3=0 Scene3_1=1 break case 2: Scene3=0 Scene3_1=2 break case 3: Scene3=0 Scene3_1=3 break case 4: Scene3=0 Scene3_1=4 break case 5: Scene3=0 Scene3_1=5 break case 6: Scene3=0 Scene=3 break }break case 2: _1_punkt_text='Лечение' _1_punkt_D=0 _2_punkt_text='Ускорение' _2_punkt_D=0 _3_punkt_text='Рассеивание' _3_punkt_D=0 _4_punkt_text='Регенерация' _4_punkt_D=0 _5_punkt_text='Возвращение' _5_punkt_D=0 _6_punkt_text='Назад' _6_punkt_D=0 scr_dialog(xx,yy,text_window,30,text3_1,10,6,1,10,200,1,40,0,0,c_black,c_white) switch _Current_Punkt{ case 1: Scene3=0 Scene3_2=1 break case 2: Scene3=0 Scene3_2=2 break case 3: Scene3=0 Scene3_2=3 break case 4: Scene3=0 Scene3_2=4 break case 5: Scene3=0 Scene3_2=5 break case 6: Scene3=0 Scene=3 break }break }
beril, пункт 6 недоступен , для примера. Вот смотри: _1_punkt_text='Пункт1' _1_punkt_D=0 _2_punkt_text='Пункт2' _2_punkt_D=0 _3_punkt_text='Пункт3' _3_punkt_D=0 _4_punkt_text='Пункт4' _4_punkt_D=0 _5_punkt_text='Пункт5' _5_punkt_D=0 _6_punkt_text='Пункт6' _6_punkt_D=1
Добавлено (18.09.2013, 19:07) --------------------------------------------- И еще , забыл сказать , на прошедшие сцены , котороые уже были, можно возвращаться. Пример:
switch Scene{ case 1: _1_punkt_text='Пункт1' _1_punkt_D=0 _2_punkt_text='Пункт2' _2_punkt_D=0 _3_punkt_text='Пункт3' _3_punkt_D=0 _4_punkt_text='Пункт4' _4_punkt_D=0 _5_punkt_text='Пункт5' _5_punkt_D=0 _6_punkt_text='Пункт6' _6_punkt_D=1 scr_dialog(xx,yy,text_window,30,text1,10,6,1,10,150,1,40,1,0,c_black,c_white) switch _Current_Punkt{ case 1: Scene=2 break case 2: Scene=3 break case 3: Scene=4 break case 4: Scene=5 break case 5: Scene=6 break case 6: Scene=7 break }break case 2: scr_dialog(xx,yy,text_window,30,text2,10,0,1,10,150,1,40,0,0,c_black,c_white) if _Current_Punkt=-1{Scene=1}break
С 4 часов ночи сидел я , и делал диалоги.В итоге так задолбался , что сделал универсальный код диалогов , для максимального удобства. Я его проверил , и вроде бы все работает.Подходит для любых спрайтов, шрифтов и прочего... Может и не очень удобно , некоторым показалось , но это намного проще , чем то , что у меня было утром.
Познакомимся со скриптом.=) Аргументов не хватило , и поэтому некоторые переменные от скрипта валяются вне его. Сначала нужно создать объект , в create text_punkt=object_add() - пустой объект пунктов. Назначаем Переменные:
global._text_font=font12 - шрифт для диалогов _punktSPR_1=spr_text_punkt - спрайт не выбранного пункта _punktSPR_2=spr_text_punkt_selest - спрайт выбранного пункта _punktSPR_3=spr_text_punkt_none - спрайт недоступного пункта _punkt_sound2=sound17 - звук доступного пункта(можно оставить 0) _punkt_sound1=sound16 - звук не доступного пункта(можно оставить 0) _text_sound=sound15 - звук текста(можно тоже оставить 0) _frequency_of_the_sound=1 - частота "щелканья" звука во время набирания текста _TextSpeed=1 - скорость текста _1_punkt_text='Пункт1' - название пункта 1 _1_punkt_D=0 - доступен ли пункт? _2_punkt_text='Пункт2' - название пункта 2 _2_punkt_D=0 - доступен ли пункт?
И так далее с пунктами , до 6. 6 - максимум.
О функции: scr_dialog(xx,yy,text_window,30,text2,10,0,1,10,150,1,40,0,0,c_black,c_white) 1 и 2 число - координаты (x - середина y- нижний край) 3- спрайт фона для текста.Подойдет абсолютно любой! 4- размер вашей рамки , или расстояние , на котором текст или пункты будут отдаленны от краев фона для текста 5- сам текст.Скрипт не предусматривает размер вашего текста , поэтому рассчитывайте его сами. 6- размер шрифта , сам гейммэкер , не умеет его узнавать... 7-количество пунктов диалога ,максимум 6, если оставить на 0 , то достаточно будет кликнуть по области текста. 8-растянуть спрайты пунктов?Если да , то спрайты будут растянуты вдоль текстов пунктов , даже учитывая несколько строк(Если конечно используется знак#) 9-высота расположения пунктов от рамки 10-горизонтальная дистанция между пунктами 11- расположение пунктов.Если 0 , то пункты расположатся на нижнем ряду ( все 6) , если 1 , то пункты расположатся в 2 или 3 столбика1 12- вертикальная дистанция (если число 11 равно 0 , иначе смысла не имеет) 13- появление , если 1 , то диалог появится со временем, если 0 , то диалог мгновенно появится.Используется для начала диалога. 14- исчезновение , то же ,что и первое , но диалог исчезает.Используется для завершения диалога. 15- цвет обводки теста 16- цвет самого текста
Как использовать код: Сначала назначаем переменные текстами: text1='Выберите пункт' text2='Выбран пункт 1' text3='Выбран пункт 2' text4='Выбран пункт 3' text5='Выбран пункт 4' text6='Выбран пункт 5' text7='Выбран пункт 6' text8='Спасибо за выбор' Затем назначаем переменные: global._text_font=font12 _punktSPR_1=spr_text_punkt _punktSPR_2=spr_text_punkt_selest _punktSPR_3=spr_text_punkt_none _punkt_sound2=sound17 _punkt_sound1=sound16 _text_sound=sound15 xx=view_xview[0]+640 yy=view_yview[0]+1024 _frequency_of_the_sound=1 _TextSpeed=1
Используем переключение сцен: switch Scene{ //Проверяем номер сцены case 1: //Сцена 1 //Даем названия пунктам и назначаем им доступность: _1_punkt_text='Пункт1' _1_punkt_D=0 _2_punkt_text='Пункт2' _2_punkt_D=0 _3_punkt_text='Пункт3' _3_punkt_D=0 _4_punkt_text='Пункт4' _4_punkt_D=0 _5_punkt_text='Пункт5' _5_punkt_D=0 _6_punkt_text='Пункт6' _6_punkt_D=1
scr_dialog(xx,yy,text_window,30,text1,10,6,1,10,150,1,40,1,0,c_black,c_white) switch _Current_Punkt{ //Проверяем выбранный пункт.Выбранный пункт нам доступен только под диалогом! case 1: Scene=2 break //Если игрок выбрал пункт 1 , то он перейдет на сцену 2, также и с остальными case 2: Scene=3 break case 3: Scene=4 break case 4: Scene=5 break case 5: Scene=6 break case 6: Scene=7 break }break case 2: scr_dialog(xx,yy,text_window,30,text2,10,0,1,10,150,1,40,0,0,c_black,c_white) if _Current_Punkt=-1{Scene=8}break //Если пунктов не существует , то при нажатии по диалогу , _Current_Punkt будет равен -1 case 3: scr_dialog(xx,yy,text_window,30,text3,10,0,1,10,150,1,40,0,0,c_black,c_white) if _Current_Punkt=-1{Scene=8}break case 4: scr_dialog(xx,yy,text_window,30,text4,10,0,1,10,150,1,40,0,0,c_black,c_white) if _Current_Punkt=-1{Scene=8}break case 5: scr_dialog(xx,yy,text_window,30,text5,10,0,1,10,150,1,40,0,0,c_black,c_white) if _Current_Punkt=-1{Scene=8}break case 6: scr_dialog(xx,yy,text_window,30,text6,10,0,1,10,150,1,40,0,0,c_black,c_white) if _Current_Punkt=-1{Scene=8}break case 7: scr_dialog(xx,yy,text_window,30,text7,10,0,1,10,150,1,40,0,0,c_black,c_white) if _Current_Punkt=-1{Scene=8}break case 8: scr_dialog(xx,yy,text_window,30,text8,10,0,1,10,150,1,40,0,1,c_black,c_white) if _Current_Punkt=-1{Scene=0 global.TheatrEnd=1} //Сцена завершилась , занавес закрылся break }
Если что-то не понятно - спрашивайте. И вот еще скриншот:
Для тех , кто не понял даже , что такое рамка ,вотпример
Вот 2 скрипта: scr_text_punkt - код пунктов диалога
Код
with argument0{ draw_set_halign(fa_center) draw_set_valign(fa_center)
_Str=0 for (_O=0 ;string_length(argument1)>_O ;_O+=1){ if string_char_at(argument1,_O)='#'{_Str+=1} } argument3+=4
if argument4=0{ _xxx=sprite_get_width(argument5)/2 _yyy=sprite_get_height(argument5)/2
if (x-_xxx)<mouse_x and mouse_x <(x+_xxx) and (y-_yyy)<mouse_y and mouse_y<(y+_yyy){ if argument8=0 {draw_sprite(argument6,-1,x,y)}else{draw_sprite(argument7,-1,x,y)} global._Selected_Punkt[argument2]=1} else{ if argument8=0 {draw_sprite(argument5,-1,x,y)}else{draw_sprite(argument7,-1,x,y)} global._Selected_Punkt[argument2]=0}}
if argument4=1{ _xxx=(string_length(argument1)*argument3/2)/(_Str+1) _yyy=argument3*_Str+argument3
if (x-_xxx)<mouse_x and mouse_x <(x+_xxx) and (y-_yyy)<mouse_y and mouse_y<(y+_yyy){ if argument8=0 {draw_sprite_stretched(argument6,-1,x-_xxx,y-_yyy,_xxx*2,_yyy*2-argument3/4)}else{{draw_sprite_stretched(argument7,-1,x-_xxx,y-_yyy,_xxx*2,_yyy*2-argument3/4)}} global._Selected_Punkt[argument2]=1} else{ if argument8=0 {draw_sprite_stretched(argument5,-1,x-_xxx,y-_yyy,_xxx*2,_yyy*2-argument3/4)}else{{draw_sprite_stretched(argument7,-1,x-_xxx,y-_yyy,_xxx*2,_yyy*2-argument3/4)}} global._Selected_Punkt[argument2]=0}}
draw_set_valign(fa_top) if argument12=1 and _appearance=0 and _Simvols=0{_appearance=1 _text_alpha=0} if _appearance=1 and _text_alpha<1{_text_alpha+=0.02}else{if _disappearance=0 {_appearance=0 _text_alpha=1}} if _Simvols=0 {_Speed=_TextSpeed _timer=1}
_Current_Punkt=0 _xx=argument0 _yy=argument1 _sizex=sprite_get_width(argument2)/2 _sizey=sprite_get_height(argument2) if _Simvols>_MaxSimvols{_Simvols=_MaxSimvols } draw_sprite_ext(argument2,-1,_xx,_yy,1,1,0,c_white,_text_alpha)
if _Simvols=_MaxSimvols and _disappearance=0{ switch argument6{ case 1: if instance_exists(text_punkt)=0{ _1_punkt=instance_create(_xx,_yy-argument3-argument5,text_punkt) } break case 2: if instance_exists(text_punkt)=0{ _1_punkt=instance_create(_xx-argument9*1.66,_yy-argument8-argument3-argument5,text_punkt) _2_punkt=instance_create(_xx+argument9*1.66,_yy-argument8-argument3-argument5,text_punkt) } break case 3: if instance_exists(text_punkt)=0{ _1_punkt=instance_create(_xx-argument9*1.66,_yy-argument8-argument3-argument5,text_punkt) _2_punkt=instance_create(_xx,_yy-argument8-argument3-argument5,text_punkt) _3_punkt=instance_create(_xx+argument9*1.66,_yy-argument8-argument3-argument5,text_punkt) } break case 4: if instance_exists(text_punkt)=0{ if argument10=0{ _1_punkt=instance_create(_xx-argument9*1.66,_yy-argument8-argument3-argument5,text_punkt) _2_punkt=instance_create(_xx-argument9,_yy-argument8-argument3-argument5,text_punkt) _3_punkt=instance_create(_xx+argument9,_yy-argument8-argument3-argument5,text_punkt) _4_punkt=instance_create(_xx+argument9*1.66,_yy-argument8-argument3-argument5,text_punkt) } if argument10=1{ _1_punkt=instance_create(_xx-argument9,_yy-argument8-argument3-argument5-argument11,text_punkt) _2_punkt=instance_create(_xx-argument9,_yy-argument8-argument3-argument5,text_punkt) _3_punkt=instance_create(_xx+argument9,_yy-argument8-argument3-argument5-argument11,text_punkt) _4_punkt=instance_create(_xx+argument9,_yy-argument8-argument3-argument5,text_punkt) } } break case 5: if instance_exists(text_punkt)=0{ if argument10=0{ _1_punkt=instance_create(_xx-argument9*1.66,_yy-argument8-argument3-argument5,text_punkt) _2_punkt=instance_create(_xx-argument9,_yy-argument8-argument3-argument5,text_punkt) _3_punkt=instance_create(_xx,_yy-argument8-argument3-argument5,text_punkt) _4_punkt=instance_create(_xx+argument9,_yy-argument8-argument3-argument5,text_punkt) _5_punkt=instance_create(_xx+argument9*1.66,_yy-argument8-argument3-argument5,text_punkt) } if argument10=1{ _1_punkt=instance_create(_xx-argument9,_yy-argument8-argument3-argument5-argument11,text_punkt) _2_punkt=instance_create(_xx-argument9,_yy-argument8-argument3-argument5,text_punkt) _3_punkt=instance_create(_xx,_yy-argument8-argument3-argument5-argument11/2,text_punkt) _4_punkt=instance_create(_xx+argument9,_yy-argument8-argument3-argument5-argument11,text_punkt) _5_punkt=instance_create(_xx+argument9,_yy-argument8-argument3-argument5,text_punkt) } } break case 6: if instance_exists(text_punkt)=0{ if argument10=0{ _1_punkt=instance_create(_xx-argument9*1.66,_yy-argument8-argument3-argument5,text_punkt) _2_punkt=instance_create(_xx-argument9,_yy-argument8-argument3-argument5,text_punkt) _3_punkt=instance_create(_xx-argument9/3,_yy-argument8-argument3-argument5,text_punkt) _4_punkt=instance_create(_xx+argument9/3,_yy-argument8-argument3-argument5,text_punkt) _5_punkt=instance_create(_xx+argument9,_yy-argument8-argument3-argument5,text_punkt) _6_punkt=instance_create(_xx+argument9*1.66,_yy-argument8-argument3-argument5,text_punkt)
if _Simvols<_MaxSimvols and _appearance=0 {if mouse_check_button_pressed( mb_left) and mouse_y<yy and mouse_y>(yy-_sizey) and mouse_x>(xx-_sizex) and mouse_x<(xx+_sizex){ _Speed=_Speed*5 io_clear()}else{_Simvols+=_Speed _timer-=1 if _timer=0{_timer=_frequency_of_the_sound if _text_sound>0{sound_play(_text_sound)}}}}
if mouse_check_button_pressed(mb_left) and _Simvols=_MaxSimvols and _disappearance=0{ if argument6=0 and mouse_y<yy and mouse_y>(yy-_sizey) and mouse_x>(xx-_sizex) and mouse_x<(xx+_sizex) {with text_punkt {instance_destroy()} if argument13=1{_disappearance=1}else{ _Current_Punkt=-1 _Simvols=0 } if _punkt_sound2>0{sound_play(_punkt_sound2)}} if global._Selected_Punkt[1]=1 {if _1_punkt_D=1{if _punkt_sound1>0{sound_play(_punkt_sound1)}}else{with text_punkt {instance_destroy()} if _punkt_sound2>0{sound_play(_punkt_sound2)} if argument13=1{_disappearance=1}else{_Simvols=0 _Current_Punkt=1 global._Selected_Punkt[1]=0}}} if global._Selected_Punkt[2]=1 {if _2_punkt_D=1{if _punkt_sound1>0{sound_play(_punkt_sound1)}}else{with text_punkt {instance_destroy()} if _punkt_sound2>0{sound_play(_punkt_sound2)} if argument13=1{_disappearance=1}else{_Simvols=0 _Current_Punkt=2 global._Selected_Punkt[2]=0}}} if global._Selected_Punkt[3]=1 {if _3_punkt_D=1{if _punkt_sound1>0{sound_play(_punkt_sound1)}}else{with text_punkt {instance_destroy()} if _punkt_sound2>0{sound_play(_punkt_sound2)} if argument13=1{_disappearance=1}else{_Simvols=0 _Current_Punkt=3 global._Selected_Punkt[3]=0}}} if global._Selected_Punkt[4]=1 {if _4_punkt_D=1{if _punkt_sound1>0{sound_play(_punkt_sound1)}}else{with text_punkt {instance_destroy()} if _punkt_sound2>0{sound_play(_punkt_sound2)} if argument13=1{_disappearance=1}else{_Simvols=0 _Current_Punkt=4 global._Selected_Punkt[4]=0}}} if global._Selected_Punkt[5]=1 {if _5_punkt_D=1{if _punkt_sound1>0{sound_play(_punkt_sound1)}}else{with text_punkt {instance_destroy()} if _punkt_sound2>0{sound_play(_punkt_sound2)} if argument13=1{_disappearance=1}else{_Simvols=0 _Current_Punkt=5 global._Selected_Punkt[5]=0}}} if global._Selected_Punkt[6]=1 {if _6_punkt_D=1{if _punkt_sound1>0{sound_play(_punkt_sound1)}}else{with text_punkt {instance_destroy()} if _punkt_sound2>0{sound_play(_punkt_sound2)} if argument13=1{_disappearance=1}else{_Simvols=0 _Current_Punkt=6 global._Selected_Punkt[6]=0}}} } if _disappearance=1 {_text_alpha-=0.04} if _disappearance=1 and _text_alpha<=0 { if global._Selected_Punkt[1]=1{_Current_Punkt=1 global._Selected_Punkt[1]=0} if global._Selected_Punkt[2]=1{_Current_Punkt=2 global._Selected_Punkt[2]=0} if global._Selected_Punkt[3]=1{_Current_Punkt=3 global._Selected_Punkt[3]=0} if global._Selected_Punkt[4]=1{_Current_Punkt=4 global._Selected_Punkt[4]=0} if global._Selected_Punkt[5]=1{_Current_Punkt=5 global._Selected_Punkt[5]=0} if global._Selected_Punkt[6]=1{_Current_Punkt=6 global._Selected_Punkt[6]=0} if argument6=0{_Current_Punkt=-1} _disappearance=0 _Simvols=0}
Кошмар... Почему бы просто не зациклить комнату? Как добегаешь до определенного места, нас откидывает на 10000 пикселей назад. Никто не заметит разницы.
Darkbasic, у каждого врага должно быть свое личное хп , а у тебя походу общее - одно на всех. А еще ,ты должен был скинуть свои коды - без них ничего не понять.
if instance_exists(text_punkt)=0{ Yes=instance_create(xx-210,yy-40,text_punkt) No=instance_create(xx+210,yy-40,text_punkt) } scr_text_punkt(Yes,'Да',global.Text_Yes) scr_text_punkt(No,'Нет',global.Text_No) } if mouse_check_button_pressed(mb_left) and (global.Text_Yes=1 or global.Text_No=1){des(text_punkt) Scene=0 Simvols=0 global.TheatrEnd=1}
А вот скрипт:
with argument0{ draw_set_halign(fa_center) draw_set_valign(fa_center) draw_text_ol(x,y,argument1,c_white,c_black,font12) if collision_rectangle(x-64,y-16,x+64,y+16,Cursor,0,0) {draw_sprite(spr_text_punkt_selest,-1,x,y) argument2=1} else{draw_sprite(spr_text_punkt,-1,x,y) argument2=0} draw_set_halign(fa_left) draw_set_valign(fa_left) }
Почему-то на аргумент 2 реакции нету никакой , а вот на спрайт есть. Думаю , понятно почему... Как сделать правильно?
Есть: Метка АА - любой квадрат target - красный квадрат Недоступная метка - темно-зеленый квадрат KleymoOfEnemy - синий квадрат global.Sunit - тот же KleymoOfEnemy и игрок , обведенный зеленым кругом. with AA{if collision_line(x,y,target.x,target.y,KleymoOfEnemy,1,0) {instance_destroy()}} - код для удаления меток , между которыми есть союзники врага.
Вопрос: как удалить метку под игроком , если на ее пути есть союзник , но так , чтобы игрок в учет не шел?
Картинка: Надеюсь вы разберетесь в моих каракулях....
Все надо делать блин за вас... Вот : пример Только переменные там вообще приблизительные , сам настраивай , как нужно. Я дал пример , чтобы ты сам понял суть. Там еще и стрельба сделана.
Эх.. Это библиотека или скрипт? Если библиотека - то труднее.=( Суть прицела такова: Запускается 50 шаров , через массив раздавая им по переменной от 1 до 50. Шар, используя эту переменную , двигается за 1 шаг столько раз , сколько ему позволяет эта переменная(Через repeat). Потом через 1 кадр он удаляется. Таким образом , получается такой прицел.
Пример: Код полета кота: Create:
Код
Speed=100 G=1
Step:
Код
x+=Speed y+=G G+=0.05 Speed-=1
Код прицела: Step:
Код
for (O=1;O<=50;O+=1){ Pricel=instance_create(x,y,Sharik) Pricel.Nomer=O }
Код шарика: Create:
Код
Speed=100 G=1
Step:
Код
if Timer=1{instance_destroy()} repeat(Nomer){ x+=Speed y+=G} timer+=1