Результаты поиска
| |
Dva_Kota | Дата: Среда, 22 Декабря 2010, 10:48 | Сообщение # 441 | Тема: Как сделать инвентарь в игре? |
заслуженный участник
Сейчас нет на сайте
| Ты немного напутал с координатами опять, и у тебя не везде правильно отображалось количество предметов (не в том месте где нужно). Такое ощущение что ты даже не проверяешь что сделал... Вот, я исправил (и сделал чтобы нормально отображались имена объектов): End step: Code x=view_xview[0]+476; y=view_yview[0]+40;
if (mouse_x >x-16 and mouse_x < x+16 and mouse_y > y-16 and mouse_y <y+16) { drag_item(0) name_item(0,1)} if (mouse_x >x+16 and mouse_x < x+48 and mouse_y > y-16 and mouse_y <y+16) { drag_item(1) name_item(1,2)} if (mouse_x >x+48 and mouse_x < x+80 and mouse_y > y-16 and mouse_y <y+16) { drag_item(2) name_item(2,3)}
if (mouse_x >x+80 and mouse_x < x+112 and mouse_y > y-16 and mouse_y <y+16) { drag_item(3) name_item(3,4)}
if (mouse_x >x+112 and mouse_x < x+144 and mouse_y > y-16 and mouse_y <y+16) { drag_item(4) name_item(4,5)} Draw: Code draw_sprite(s_inv,-1,view_xview[0]+476,view_yview[0]+40)
if slot[0,0] >0 { draw_sprite(slot[0,4],-1,view_xview[0]+476,view_yview[0]+40) draw_text(view_xview[0]+476+6,view_yview[0]+40+6,slot[0,1])}
if slot[1,0] >0 { draw_sprite(slot[1,4],-1,view_xview[0]+476+32,view_yview[0]+40) draw_text(view_xview[0]+476+38,view_yview[0]+40+6,slot[1,1])}
if slot[2,0] >0 { draw_sprite(slot[2,4],-1,view_xview[0]+476+64,view_yview[0]+40) draw_text(view_xview[0]+476+70,view_yview[0]+40+6,slot[2,1])}
if slot[3,0] >0 { draw_sprite(slot[3,4],-1,view_xview[0]+476+96,view_yview[0]+40) draw_text(view_xview[0]+476+102,view_yview[0]+40+6,slot[3,1])}
if slot[4,0] >0 { draw_sprite(slot[4,4],-1,view_xview[0]+476+128,view_yview[0]+40) draw_text(view_xview[0]+476+134,view_yview[0]+40+6,slot[4,1])}
if slot[5,0] >0 { draw_sprite(slot[5,4],-1,view_xview[0]+476+164,view_yview[0]+40) draw_text(view_xview[0]+476+166,view_yview[0]+40+6,slot[5,1])}
if txt == 1 { draw_text(mouse_x,mouse_y-30,slot[0,3]) } if txt == 2 { draw_text(mouse_x,mouse_y-30,slot[1,3]) } if txt == 3 { draw_text(mouse_x,mouse_y-30,slot[2,3]) } if txt == 4 { draw_text(mouse_x,mouse_y-30,slot[3,3]) }
if txt == 5 { draw_text(mouse_x,mouse_y-30,slot[4,3]) }
if draw == true { draw_text(320,240,text)}
if drag == true { draw_sprite(temp_slot[0,4],-1,mouse_x,mouse_y) } Там у тебя еще некоторых строк не хватало, я добавил (уже не помню какие). Ты просто внимательнее смотри код и что откуда берется, тогда все получится.
Новый пример инвентаря! /20.06.2012/
Energy Wars
Сообщение отредактировал Dva_Kota - Среда, 22 Декабря 2010, 10:50 |
|
| |
Dva_Kota | Дата: Среда, 22 Декабря 2010, 09:15 | Сообщение # 442 | Тема: Мои вопросы по моей игре |
заслуженный участник
Сейчас нет на сайте
| Ты, наверное, глобальное нажатие поставил. А вообще лучше сделать как (_Meloman_) сказал - Left Released. Объясню в чем тут плюс. Можно, если использовать Left Released, сделать анимацию нажатия на предмет. Хотя бы 3 кадра (просто предмет, предмет при наведении указателя мыши, предмет при нажатии). Если использовать Left Released, ты сможешь увидеть анимацию "при нажатии клавиши мыши", если сделаешь Left Pressed - анимацию ты не увидишь (а если сделать чтобы анимация была привязана к Left Released, а действие к Left Pressed анимацию ты увидишь, но будет выглядеть тупо). По такому принципу сделаны, например, кнопки в Windows.
Новый пример инвентаря! /20.06.2012/
Energy Wars
Сообщение отредактировал Dva_Kota - Среда, 22 Декабря 2010, 09:23 |
|
| |
Dva_Kota | Дата: Вторник, 21 Декабря 2010, 18:44 | Сообщение # 443 | Тема: Как сделать инвентарь в игре? |
заслуженный участник
Сейчас нет на сайте
| Да, есть. Посмотри какие там числа добавляются к х. Это же элементарно - все время добавляешь по 32. Это же ширина ячейки.
Новый пример инвентаря! /20.06.2012/
Energy Wars
Сообщение отредактировал Dva_Kota - Вторник, 21 Декабря 2010, 18:44 |
|
| |
Dva_Kota | Дата: Вторник, 21 Декабря 2010, 18:41 | Сообщение # 444 | Тема: Художник пытается освоить GML |
заслуженный участник
Сейчас нет на сайте
| Скачай отсюда нормальную русскую справку и будет тебе счастье. Справка на русском
Новый пример инвентаря! /20.06.2012/
Energy Wars
|
|
| |
Dva_Kota | Дата: Вторник, 21 Декабря 2010, 18:37 | Сообщение # 445 | Тема: Как сделать инвентарь в игре? |
заслуженный участник
Сейчас нет на сайте
| Ты все координаты одинаковые зачем поставил? Я же тебе русским языком написал: Quote (Dva_Kota) (вместо x ставь view_xview[0]+476, вместо y view_yview[0]+40) то есть вместо Code draw_sprite(slot[1,4],-1,x+32,y) у тебя будет Code draw_sprite(slot[1,4],-1,view_xview[0]+476+32,view_yview[0]+40) и т.д. Все числа, которые прибавлялись к x и y нужно было оставить на своих местах и заменить только x и y. Переделывай еще раз и сбрасывай ссылку. А я пока подумаю как добавить еще ячейки.Добавлено (21.12.2010, 18:37) --------------------------------------------- Добавление ячеек: В End Step в конец добавляешь что-то похожее на Code if (mouse_x >x+80 and mouse_x < x+112 and mouse_y > y-16 and mouse_y <y+16) { drag_item(3) name_item(3,3)} В Draw добавляешь : Code if slot[3,0] >0 { draw_sprite(slot[3,4],-1,x+96,y) draw_text(x+106,y+6,slot[3,1])} и ниже Code if txt == 4 { draw_text(mouse_x,mouse_y-30,slot[3,3]) } Думаю там разберешься куда именно в Draw пихать. (все это у объекта - инвентароь). Только координаты подправь (я в этих кодах уже правильные числа поставил, только x y замени).
Новый пример инвентаря! /20.06.2012/
Energy Wars
|
|
| |
Dva_Kota | Дата: Вторник, 21 Декабря 2010, 18:29 | Сообщение # 446 | Тема: Художник пытается освоить GML |
заслуженный участник
Сейчас нет на сайте
| Ferrumel, ты этот текст откуда взял? Перевел переводчиком или это русская справка у тебя такая? Quote (Из справки) string_format(val,tot,dec) Переводит вещественное число val в строку, используя ваш собственный формат числа: аргумент tot отвечает за полное количество цифр в числе, а dec за количество цифр после десятичной точки.
Новый пример инвентаря! /20.06.2012/
Energy Wars
Сообщение отредактировал Dva_Kota - Вторник, 21 Декабря 2010, 18:31 |
|
| |
Dva_Kota | Дата: Вторник, 21 Декабря 2010, 18:12 | Сообщение # 447 | Тема: Как сделать инвентарь в игре? |
заслуженный участник
Сейчас нет на сайте
| а что именно теперь не работает? У меня вообще никаких проблем нет с перемещением предмета в третий слот.
Новый пример инвентаря! /20.06.2012/
Energy Wars
Сообщение отредактировал Dva_Kota - Вторник, 21 Декабря 2010, 18:13 |
|
| |
Dva_Kota | Дата: Вторник, 21 Декабря 2010, 18:04 | Сообщение # 448 | Тема: Как сделать инвентарь в игре? |
заслуженный участник
Сейчас нет на сайте
| Именно в 3? Еще такая же шибка у меня была если кликнуть по первому слоту когда он пустой. Ошибка из-за того что ты присваиваешь не существующий индекс спрайта (или пустое значение). Это нужно больше в код вникать. А цифра у тебя не следует за объектом по тому что ты не написал чтобы она рисовалась . Последняя строка в Draw у твоего инвентаря отображает спрайт при перетаскивании. Добавь туда рисование текста по аналогии. Только перед "}".
Новый пример инвентаря! /20.06.2012/
Energy Wars
|
|
| |
Dva_Kota | Дата: Вторник, 21 Декабря 2010, 17:52 | Сообщение # 449 | Тема: Как сделать инвентарь в игре? |
заслуженный участник
Сейчас нет на сайте
| Ты скобку после draw_text не поставил... Да, так для каждого.
Новый пример инвентаря! /20.06.2012/
Energy Wars
Сообщение отредактировал Dva_Kota - Вторник, 21 Декабря 2010, 17:53 |
|
| |
Dva_Kota | Дата: Вторник, 21 Декабря 2010, 17:32 | Сообщение # 450 | Тема: Как сделать инвентарь в игре? |
заслуженный участник
Сейчас нет на сайте
| координаты я только для первой поменял. Аналогично для остальных поменяй (вместо x ставь view_xview[0]+476, вместо y view_yview[0]+40) то есть вместо Code draw_sprite(slot[1,4],-1,x+32,y) у тебя будет Code draw_sprite(slot[1,4],-1,view_xview[0]+476+32,view_yview[0]+40) и т.д.
Новый пример инвентаря! /20.06.2012/
Energy Wars
|
|
| |
Dva_Kota | Дата: Вторник, 21 Декабря 2010, 17:18 | Сообщение # 451 | Тема: Как сделать инвентарь в игре? |
заслуженный участник
Сейчас нет на сайте
| Как так получается что у меня работает нормально, а тебе не помогло? http://rghost.ru/3696598
Новый пример инвентаря! /20.06.2012/
Energy Wars
|
|
| |
Dva_Kota | Дата: Вторник, 21 Декабря 2010, 16:30 | Сообщение # 452 | Тема: Как сделать инвентарь в игре? |
заслуженный участник
Сейчас нет на сайте
| Я весь код несколько раз просмотрел, все скрипты, всю процедуру "доставания элемента из инвентаря" в голове прокрутил... У тебя, когда берешь любой предмет из инвентаря, отображается спрайт s_player. Причем он отображается даже если его переименовать! но вот если его удалить появляется ошибка (попытка нарисовать не существующий спрайт в draw у объекта o_inv). Вообще, если писать кодом ссылку на спрайт, а потом этот спрайт переименовать, работать не будет. Но у тебя там только код, а при переименовании спрайта все равно работает... И вот, наконец-то я нашел в чем ошибка! Скорее всего это даже не ошибка, а опечатка. Или из-за невнимательности ты не то число написал... Последняя строчка кода в событии draw у объекта o_inv Code draw_sprite(temp_slot[0,3],-1,mouse_x,mouse_y) ты рисуешь спрайт temp_slot[0,3]. А что же у нес хранится в переменной temp_slot[0,3]? Смотрим событие "создание" у объекта o_inv. А там написано: Code slot[0,3] = 0 //Имя slot[0,4] = 0 //Спрайт дальше ище идет взаимодействие со скриптами add_item и drag_item про них я скажу лишь то, что в add_item нужно поменять местами комментарии "имя" и "вес" (не все строки, а именно комментарии), чтобы не было путаницы, они там наоборот стоят. Так вот в чем главная ошибка была: ты рисовал спрайт с индексом temp_slot[0,3], а это не индекс спрайта с бутылкой, а индекс самого первого созданного спрайта. Там у тебя (в переменной) записана строка, а она воспринимается как ноль. С этим я до конца не разобрался, но логически получается что так оно и есть. чтобы все это исправить замени Code draw_sprite(temp_slot[0,3],-1,mouse_x,mouse_y) на Code draw_sprite(temp_slot[0,4],-1,mouse_x,mouse_y)
Новый пример инвентаря! /20.06.2012/
Energy Wars
|
|
| |
Dva_Kota | Дата: Вторник, 21 Декабря 2010, 15:52 | Сообщение # 453 | Тема: Художник пытается освоить GML |
заслуженный участник
Сейчас нет на сайте
| Я и не говорю что нужно отказываться от текста. Сурфейсы рулят. Просто привожу сравнеие двух способов.
Новый пример инвентаря! /20.06.2012/
Energy Wars
|
|
| |
Dva_Kota | Дата: Вторник, 21 Декабря 2010, 15:47 | Сообщение # 454 | Тема: Художник пытается освоить GML |
заслуженный участник
Сейчас нет на сайте
| Quote (Фил) В ГМ текстовые операции относятся к графическим. И они одинаковы медленны. Да, я про это и говорю. Но, при рисовании текста каждый символ рисуется отдельно (на сколько я знаю), при рисовании спрайта, на котором сразу весь нужный текст - он рисуется сразу целиком и это быстрее (проверено мной лично). Конечно, если каждый символ рисовать отдельным спрайтом то это, наверное не будет быстрее (я такое делать не побывал и не знаю будет ли это так же как рисование текста или медленнее (я думаю что медленнее)). Занимает меньше памяти не значит работает быстрее. Вот простой пример: Загружаем все спрайты для игры из папки. Есть два варианта: загрузить сразу все спрайты в начале игры или загружать спрайты по мере появления объектов в комнате. Второй способ будет работать медленнее и "подлагивать" когда будут появляться новые объекты, хотя объем занимаемой памяти будет меньше (тоже проверено мной лично).
Новый пример инвентаря! /20.06.2012/
Energy Wars
Сообщение отредактировал Dva_Kota - Вторник, 21 Декабря 2010, 15:51 |
|
| |
Dva_Kota | Дата: Вторник, 21 Декабря 2010, 15:08 | Сообщение # 455 | Тема: Художник пытается освоить GML |
заслуженный участник
Сейчас нет на сайте
| Вообще, отображение текста не очень быстрая операция, по этому, если ты не будешь считывать потом эти символы как текст, тебе лучше сделать это картинкой. А вообще ты можешь добавить шрифт, где есть такие символы, и использовать его. (сам я не пробовал, но в теории должно работать)
Новый пример инвентаря! /20.06.2012/
Energy Wars
|
|
| |
Dva_Kota | Дата: Вторник, 21 Декабря 2010, 14:49 | Сообщение # 456 | Тема: Художник пытается освоить GML |
заслуженный участник
Сейчас нет на сайте
| Quote (Ferrumel) Народ, подскажите коды ASCI я нашел только табличку ASCII там некоторые вещи не проходят. это относится к функциям chr(val), ord(val) и некоторым другим. А для чего именно теле нужно? Можно узнать с помощью ord(str). Например пишешь ord('A') - это будет для A
Новый пример инвентаря! /20.06.2012/
Energy Wars
|
|
| |
Dva_Kota | Дата: Вторник, 21 Декабря 2010, 14:12 | Сообщение # 457 | Тема: Мини пример Prince of Persia |
заслуженный участник
Сейчас нет на сайте
| Любой пример платформера возьми.
Новый пример инвентаря! /20.06.2012/
Energy Wars
Сообщение отредактировал Dva_Kota - Вторник, 21 Декабря 2010, 14:12 |
|
| |
Dva_Kota | Дата: Вторник, 21 Декабря 2010, 14:01 | Сообщение # 458 | Тема: Как сделать инвентарь в игре? |
заслуженный участник
Сейчас нет на сайте
| Значит так. первая ошибка: В драв у инвентаря первая строка: Code draw_sprite(o_inv,image_index,view_xview[0]+444,view_yview[0]+2) Это ты рисуешь относительно вида. Все правильно. Потом у тебя идут строки, которыми ты рисуешь предметы в инвентаре. И вот тут уже не правильно. Тут ты пишешь просто x и y Это координаты относительно самого инвентаря, а он у тебя не двигается. Он у тебя на месте стоит, просто рисует спрайты в разных местах (привязывает их к виду) Вот я исправил для первого слота. Для остальных исправь аналогично: Code if slot[0,0] >0 { //Если слот 0 заполнен draw_sprite(slot[0,4],-1,view_xview[0]+444,view_yview[0]+25) /*То рисуем спрайт в первой клетке равный указанному в скрипте*/ draw_text(view_xview[0]+444+6,view_yview[0]+25+6,slot[0,1])} //И пишем кол-во Теперь у тебя спрайт бутылки будет вверху экрана и будет следовать за видом. Число возле бутылки (это, я так понял количество) тоже будет следовать за видом. Вот только расположен инвентарь у тебя фактически там, где ты его поставил в редакторе, по этому надпись при наведении мыши (и вообще, реакция на мышь) будет как будто он стоит там, а не двигается. Чтобы этого небыло, привяжи сам инвентарь к виду. Для этого в End Step инвентарю добавь строки: Code x=view_xview[0]+444; y=view_yview[0]+25; Изменяй и смотри что получится. Со спрайтами твоими не правильными чуть позже разберусь.Добавлено (21.12.2010, 14:01) --------------------------------------------- Вполне естественно что у тебя инвентарь не совпадает с предметом в инвентаре: У тебя инвентарь рисуется первой строкойв координатах (view_xview[0]+476,view_yview[0]+40), а предмет в первом слоте ты располагаешь в координатах (view_xview[0]+444,view_yview[0]+25). Видишь разницу? инвентарь рисуешь в одном месте, а предмет - в другом... Координаты инвентаря (у тебя центр спрайта в верхнем левом углу) и координаты первой ячейки должны совпадать. К координатам остальных ячеек добавляй размер ячейки, чтобы рисовалось уже в следующей ячейке (ты, кстати, только для первой изменил, для остальных тоже измени координаты).
Новый пример инвентаря! /20.06.2012/
Energy Wars
|
|
| |
Dva_Kota | Дата: Вторник, 21 Декабря 2010, 12:00 | Сообщение # 459 | Тема: Художник пытается освоить GML |
заслуженный участник
Сейчас нет на сайте
| Вроде бы "draw_" нужно писать в Draw, а все остальное - куда угодно (хотя, возможно, я про что-то забыл)
Новый пример инвентаря! /20.06.2012/
Energy Wars
|
|
| |
Dva_Kota | Дата: Вторник, 21 Декабря 2010, 10:19 | Сообщение # 460 | Тема: Художник пытается освоить GML |
заслуженный участник
Сейчас нет на сайте
| Quote (Ferrumel) А что считает функця median (n1,n2,n3....) Берутся все числа которые ты записал, находится среднее (Не среднее арифметическое, а именно среднее!). То есть например у тебя числа: 1; 5; 2; 7; 9; 50; 12. Функция работает примерно так: выстраивает их по порядку, 1; 2; 5; 7; 9; 12; 50. Потом выбирается то число, которое стоит по середине, то есть 7. Если количество чисел будет четным, в середине будут стоять два числа. Из них будет выбрано меньшее. Например такой ряд чисел: 1; 2; 5; 7; 9; 12; 50; 60. В середине стоят числа 7 и 9. Из них будет выбрано меньшее, то есть 7. Quote (Ferrumel) Quote Потому что draw_text - команда для Draw: а нигде этого не написано Да, я тоже не знаю где это написано, но все функции, которые начинаются с "draw_" используются в событии Draw.
Новый пример инвентаря! /20.06.2012/
Energy Wars
Сообщение отредактировал Dva_Kota - Вторник, 21 Декабря 2010, 10:22 |
|
| |
|