Sanek94
Участник
  
Репутация: 24
Offline
Пол: 
API: Game Maker 8.0 Pro
Сообщений: 214
|
 |
« Ответ #195 : Июль 29, 2012, 09:32:21 » |
|
При этом коде,спрайт шлема с самого начала игры тупо прилипнет к ГГ и всё, а мне нужно что бы именно spr_armor_01_player менялся в зависимости от направления.
А что мешает тебе, вместо проверки спрайта, проверять направление? Я написал тебе примерный код, самый простой. Вот другой вариант. Cоздай переменную у героя, и меняй ее в зависимости от нажатой клавиши (Влево- dir=0, Вправо- dir=1). А в рисовании вместо image_index(кадр) подставляешь эту переменную. draw_sprite(s_helmet,dir,x,y);
|
|
|
|
|
Записан
|
|
|
|
Reylor
Пользователь
 
Репутация: 1
Offline
Пол: 
API: Game Maker 8.0 Pro
Деятельность: Чём я занимаюсь в игрострое?... хм. да всем с чем приходится работать. Всего по немногу.
Сообщений: 90
|
 |
« Ответ #196 : Июль 29, 2012, 11:12:38 » |
|
Зачем создавать переменные, если всё уже давно прописанно. Вот здесь я хочу переписать: act_on = ' obj_hero.armor += 2; obj_hero.s_helmet = spr_armor_01_player'; act_off = ' obj_hero.armor -= 2; obj_hero.s_helmet = spr_no_spr; ';
|
|
|
|
|
Записан
|
|
|
|
|
Dva_Kota
|
 |
« Ответ #197 : Июль 30, 2012, 17:41:18 » |
|
Sanek94 правильный код написал, нечего на него наезжать. Его, конечно, можно немного усовершенствовать, но в целом он работает как нужно. В Draw у игрока есть такой код: draw_sprite(sprite_index,-1,x,y);//Рисуем игрока draw_sprite(s_armor,-1,x,y);//Рисуем броню draw_sprite(s_helmet,-1,x,y);//Рисуем шлем Замени третью строку на то что предлагает Sanek94. То что в условии if зависит от того как ты определяешь в какую сторону повернут ГГ, например если это смена спрайтов, то код именно как у него, а если отражением спрайта то if (image_xscale) { draw_sprite(s_armor,нужный номер кадра,x,y);//Рисуем броню } else { draw_sprite(s_armor,нужный номер кадра,x,y);//Рисуем броню } Добавлено: Июль 30, 2012, 17:53:17 Может быть, я не совсем правильно объяснил. Я забыл что в примере для отображения на игроке используется другой спрайт, не тот который отображается в инвентаре. Но тут все то же самое, нужно сделать два кадра у спрайта который отображается на игроке: один когда игрок смотрит вправо, второй - когда игрок смотрит влево. В остальном все то же самое.
|
|
|
|
|
Записан
|
|
|
|
dtestd
Посетитель

Репутация: 2
Offline
API: Game Maker 8.0 Pro
Сообщений: 30
|
 |
« Ответ #198 : Август 08, 2012, 02:11:11 » |
|
А как сделать перетаскивание инвентаря за Title, а не за ячейки? Ведь вещи мешают перетаскиванию.
|
 Пример инвентаря
Инвентарь.png (7.37 Кб, 432x447 - просмотрено 883 раз.)
|
|
|
Записан
|
|
|
|
|
Dva_Kota
|
 |
« Ответ #199 : Август 09, 2012, 12:51:18 » |
|
Добавить в событие нажатия правой клавиши мыши, в самое начало, еще одну проверку "Если курсор находится в верхней части окна инвентаря", примерно так: if (mouse_y < y+20 and mouse_y > y and mouse_x < x+200 and mouse_x > x) { if (!position_meeting(mouse_x,mouse_y,obj_inv_obm_2)) { inv_move = true; m_x = mouse_x - x; m_y = mouse_y - y; } } Это код для твоей картинки, т.е. перетаскиваем за заголовок, заголовок на всю ширину окна инвентаря , заголовок начинается с верхней части инвентаря и высота его 20, ширина 200 (числа взыл просто так, 200 должно быть равно ширине окна инвентаря). Но, как я понимаю, заголовок не является частью инвентаря (у меня в примере заголовка нет), а просто рисуется. Тогда события нажатия клавиши не сработает и нежно будет заменить его на глобальное событие нажатия клавиши мыши.
|
|
|
|
|
Записан
|
|
|
|
dtestd
Посетитель

Репутация: 2
Offline
API: Game Maker 8.0 Pro
Сообщений: 30
|
 |
« Ответ #200 : Август 11, 2012, 12:49:55 » |
|
Не получилось. Почему-то перетаскивание происходит в этом районе (см. влож.). А можно ли сделать перетаскивание по спрайту spr_inv_back ?
|
 Пример инвентаря
134.png (4.23 Кб, 176x150 - просмотрено 893 раз.)
|
|
|
Записан
|
|
|
|
|
Dva_Kota
|
 |
« Ответ #201 : Август 13, 2012, 17:13:58 » |
|
Но, как я понимаю, заголовок не является частью инвентаря (у меня в примере заголовка нет), а просто рисуется. Тогда события нажатия клавиши не сработает и нежно будет заменить его на глобальное событие нажатия клавиши мыши.
if (mouse_y < y+20 and mouse_y > y and mouse_x < x+200 and mouse_x > x) заменить на if (mouse_y < y and mouse_y > y-20 and mouse_x < x+200 and mouse_x > x) (Числа сам подбери, можно нарисовать еще один спрайт - спрайт заголовка, потом рисовать его отдельно)
|
|
|
|
|
Записан
|
|
|
|
dtestd
Посетитель

Репутация: 2
Offline
API: Game Maker 8.0 Pro
Сообщений: 30
|
 |
« Ответ #202 : Август 14, 2012, 00:07:31 » |
|
Dva_Kota, спасибо тебе!
|
|
|
|
|
Записан
|
|
|
|
Reylor
Пользователь
 
Репутация: 1
Offline
Пол: 
API: Game Maker 8.0 Pro
Деятельность: Чём я занимаюсь в игрострое?... хм. да всем с чем приходится работать. Всего по немногу.
Сообщений: 90
|
 |
« Ответ #203 : Август 17, 2012, 19:23:56 » |
|
Dva_Kota но если использовать твой код то на ГГ с самого начала игры будет надет этот спрайт!
|
|
|
|
|
Записан
|
|
|
|
|
Dva_Kota
|
 |
« Ответ #204 : Август 17, 2012, 22:02:51 » |
|
Reylor, ты пример смотрел? В сообщении #197 написан код, который сейчас в Draw. s_armor это не спрайт, а переменная, в которую записывается индекес спрайта брони. Если брони на игроке нет, то в эту переменную записывается индекс пустого (прозрачного) спрайта и броня не отображается. Аналогично и переменная s_helmet.
|
|
|
|
|
Записан
|
|
|
|
Reylor
Пользователь
 
Репутация: 1
Offline
Пол: 
API: Game Maker 8.0 Pro
Деятельность: Чём я занимаюсь в игрострое?... хм. да всем с чем приходится работать. Всего по немногу.
Сообщений: 90
|
 |
« Ответ #205 : Август 19, 2012, 17:45:18 » |
|
Ну вот сделал с твоим кодом, что не так? (s_armor это не спрайт - знаю, просто не так выразился)
|
|
|
|
Записан
|
|
|
|
|
Dva_Kota
|
 |
« Ответ #206 : Август 20, 2012, 09:29:44 » |
|
Вообще-то я думал что если тебе нужно чтобы спрайт одежды показывался по-разному в зависимости от того в какую сторону повернут персонаж, то ты и поворот персонажа уже реализовал, а у тебя персонаж не поворачивается, поэтому и броня отображает только первый кадр. В Step у игрока замени код на это: if keyboard_check (ord('A')) && place_free (x-hero_speed,y) { x-= hero_speed; image_xscale = -1; } if keyboard_check (ord('D')) && place_free (x+hero_speed,y) { x+=hero_speed image_xscale = 1; } if keyboard_check (ord('W')) && place_free (x,y-hero_speed) y-= hero_speed; if keyboard_check (ord('S')) && place_free (x,y+hero_speed) y+= hero_speed;
Если тебе нужно сделать поворот игрока не отражением спрайта, а заменой, то в событии рисования, там где выбирается какой кадр брони рисовать, нужно делать проверку не по отражению спрайта игрока, а по спрайту игрока.
|
|
|
|
|
Записан
|
|
|
|
Reylor
Пользователь
 
Репутация: 1
Offline
Пол: 
API: Game Maker 8.0 Pro
Деятельность: Чём я занимаюсь в игрострое?... хм. да всем с чем приходится работать. Всего по немногу.
Сообщений: 90
|
 |
« Ответ #207 : Август 20, 2012, 15:53:09 » |
|
О, благодарю. 
|
|
|
|
|
Записан
|
|
|
|
wargamen
Участник
  
Репутация: 19
Offline
Пол: 
API: Game Maker 6.1
Деятельность: Java, GMS, pixelart
Сообщений: 155
Java, i love you:3
|
 |
« Ответ #208 : Август 22, 2012, 17:12:43 » |
|
мм, у меня возник вопросик, как можно в этом инвентаре реализовать две вещи: 1.Чтобы при нажатии в одном инвентаре, в другом находился какойто итем и уничтожалось какое то количество из них 2.Вопрос посложнее, вот допустим у меня есть обьект - итем, когда он создается у него случайно генерируется какойто параметр, как можно это сделать только при первом создании, тоесть например если выкинешь из инвентаря и снова подберёш - у него были такие же параметры
|
|
|
|
|
Записан
|
"Если ты играешь в престолы, ты должен либо умереть, либо победить! Среднего не бывает!". Песнь льда и пламени.
"Закон бесконечной всемирной извращенности или закон Феликса." Когда сисадмины правили Землей.
|
|
|
Sanek94
Участник
  
Репутация: 24
Offline
Пол: 
API: Game Maker 8.0 Pro
Сообщений: 214
|
 |
« Ответ #209 : Август 22, 2012, 18:41:54 » |
|
мм, у меня возник вопросик, как можно в этом инвентаре реализовать две вещи: 1.Чтобы при нажатии в одном инвентаре, в другом находился какойто итем и уничтожалось какое то количество из них 2.Вопрос посложнее, вот допустим у меня есть обьект - итем, когда он создается у него случайно генерируется какойто параметр, как можно это сделать только при первом создании, тоесть например если выкинешь из инвентаря и снова подберёш - у него были такие же параметры
1. Не понял вопроса. 2. Нужно записывать эти параметры в ячейку инвентаря. А в событии выкидывания делаем следующее. predmet=instance_create(x,y,object) // создаем предмет, и записываем его id в переменную predmet
А дальше присваиваешь к этой переменной параметры, которые ты записал в ячейку инвентаря.
|
|
|
|
|
Записан
|
|
|
|
|