P.S. хотя наверное правильней делать через Virtual Button.
Именно. А вообще, что бы friction работал, надо через vspeed работать, а не через координаты А звезды, будто мириады стрел, Ловя на мушку силуэты снов. Смеется и злорадствует любовь, И мы с тобой попали в их прицел...
XDominator, тебе плюс и от меня... Я совсем забыл про этот код, в итоге приходилось создавать целую переменную, в зависимости от нее производить действие и деактивировать при столкновении... Я дурак(( А звезды, будто мириады стрел, Ловя на мушку силуэты снов. Смеется и злорадствует любовь, И мы с тобой попали в их прицел...
http://rghost.ru/56428944 - новая версия. Изменено управление на стрелки (влево - красный, вниз - зеленый, вправо - желтый). Добавлены жизни, эффект тряски. Улучшено меню. Улучшена таблица рекордов. Теперь с возможностью очистки (из меню). Пока все. Это была альфа-версия. Ждите пред-финалку. Добавлю лазеры и щит + еще 2 вида препятствий (шипы и "подобие врага") А звезды, будто мириады стрел, Ловя на мушку силуэты снов. Смеется и злорадствует любовь, И мы с тобой попали в их прицел...
Сообщение отредактировал SpeRdKeaR - Вторник, 17 Июня 2014, 15:55
var up,down,left,right; //Управление if keyboard_check(ord('W')) || keyboard_check(vk_up) {up = true}else{up = false}; if keyboard_check(ord('S')) || keyboard_check(vk_down) {down = true}else{down = false}; if keyboard_check(ord('A')) || keyboard_check(vk_left) {left = true}else{left = false}; if keyboard_check(ord('D')) || keyboard_check(vk_right) {right = true}else{right = false}; //Движение if speed < 15 { if up {vspeed-=1}; if down {vspeed+=1}; if left {hspeed-=0.5}; if right {hspeed+=1}; } //Трение if up || down || left || right {friction=0.4}else{friction=1};
Сам не студией, а восьмеркой пользуюсь, но по-моему в твоем случае все легко. P.S. Мой тебе совет - если используешь скольжение (да и если не используешь ) пиши не -= (когда хочешь отрицательное значение придать), а =-. Хотя - твои проблемы, но могут быть баги со скоростью. Так как с -= будет просто убавлять у переменной введенное значение, а с =- - придавать отрицательное. А звезды, будто мириады стрел, Ловя на мушку силуэты снов. Смеется и злорадствует любовь, И мы с тобой попали в их прицел...
Сообщение отредактировал SpeRdKeaR - Вторник, 17 Июня 2014, 13:23
mehanic, спасибо). На телефоны пока портировать не могу, в виду отсутствия средств. Если по окончанию разработки я смогу найти нужную сумму - игра непременно появиться и на телефонах.
Добавлено (16.06.2014, 12:56) --------------------------------------------- Скачать пре-альфу Пока мало чего готово, а именно:
Код
3 цвета (позже будет больше) 1 вид препятствий (будет минимум 5) Ускорение
Планы на будущее (Первые 4 - на альфу):
Код
5 цветов 3 вида препятствий Лазеры и Щит (защита от стреляющих сверху лазеров) Спец. эффекты (тряска и взрывы - для динамичности) 3 вида бонусов (замедление, неуязвимость, +1000 очков) Магазин бонусов (для двух видов - замедление и неуязвимость).
Вот. Пока играйте - наслаждайтесь =)) А звезды, будто мириады стрел, Ловя на мушку силуэты снов. Смеется и злорадствует любовь, И мы с тобой попали в их прицел...
Сообщение отредактировал SpeRdKeaR - Понедельник, 16 Июня 2014, 13:04
Жанр: Раннер, На реакцию Описание: Простенький раннер, где на игрока движутся препятствия разного цвета. В зависимости от цвета препятствий игроку надо менять свой цвет. Если цвет игрока совпадает с цветом препятствий - игрок не умирает и игра продолжается. Управление:R-Включить красный G-Включить зеленый Y-Включить желтый.
Да, но скорее всего да, если уж все таки не нет, то да оно да, но тут да нет наверное, на да. Или нет? А звезды, будто мириады стрел, Ловя на мушку силуэты снов. Смеется и злорадствует любовь, И мы с тобой попали в их прицел...
Дофигища ошибок! Правда, еще на стадии прописывания перемещения персонажа я подумал "А как он будет делать передвижение по льду, если перемещение он делает через изменение координат?" Напомню, что hspeed в таком случае будет оставаться нулевым.
Ну да, затупил. Извини. Просто пишу так, как сейчас делаю в игре. А звезды, будто мириады стрел, Ловя на мушку силуэты снов. Смеется и злорадствует любовь, И мы с тобой попали в их прицел...
И так, все тут понятно из названия. Сразу приступаем к созданию. Что главным образом должно быть в любом платформере? Конечно же - игрок, движение и какой-никак противник. Но тут мы сделаем не только выше перечисленное, но и: ИИ врага Лёд со скольжением Шаг 1. Спрайты. Для начала создайте эти спрайты: Игрок (выровняйте "по центру") - spr_player Стена - spr_wall Враг (выровняйте "по центру") - spr_enemy Лёд - spr_ice Лифт - spr_lift Готово. Переходим ко второму шагу. Шаг 2. Движение. Создайте игрока - obj_player, присвоив ему аналогичный спрайт. Ему в step запишите:
Код
if place_free (x,y+1)//Если снизу нет объектов then//То... gravity=1.5//Гравитация равна 1,5 else//В противном случае... gravity=0//Гравитация равна 0
Тут закончили. Комментарии были, так что все понятно. Идем дальше. Дописываем все тот же код в step:
Код
if keyboard_check(vk_left) and place_free(x-1,y)//Если зажата клавиша влево и слева нет объектов... then//То... {x-=5//Перемещаемся на 5 пикселей влево... image_xscale=-1//Поворачиваем спрайт влево.}
Тут думаю все понятно. Дальше пишем вот что:
Код
if keyboard_check(vk_right) and place_free(x+1,y)//Если зажата клавиша вправо и справа нет объектов... then//То... {x+=5//Перемещаемся на 5 пикселей вправо... image_xscale=1//Поворачиваем спрайт вправо.}
Закончили. Переходим к прыжку. Пишем все в тот же step:
Код
if keyboard_check_pressed(vk_up) and not place_free(x,y+1)//Если нажата клавиша вверх и снизу есть объекты... then//То... vspeed=-15//Прыгаем - вертикальная скорость равна -15
Дальше создайте obj_wall, присвойте аналогичный спрайт. Поставьте галочку на "Твердый". Игроку в столкновение с obj_wall запишите:
Код
if not place_free(x,y+vspeed} and vspeed>0//Если ниже на кол-во пикселей, равных вертикально скорости нет объектов и вертикальная скорость больше нуля... then//То... {vspeed=0 move_contact(270)}//Останавливаем вертикальное перемещение игрока.
Шаг 2. Враги. Тут дела обстоят сложнее, но создать простой ИИ не так трудно. Создайте obj_enemy, присвойте аналогичный спрайт. Пишите в step:
Код
if place_free (x,y+1)//Если снизу нет объектов then//То... gravity=1.5//Гравитация равна 1,5 else//В противном случае... gravity=0//Гравитация равна 0
Тут, думаю, все было понятно. Дальше дописываем:
Код
if obj_player.x<x//Если игрок левее врага then//То... {x-=3 image_xscale=-1}//Поворачиваем спрайт врага влево. Двигаемся влево со скоростью 3. if obj_player.x>x//Если игрок правее врага then//То... {x-=3 image_xscale=1}//Поворачиваем спрайт врага вправо. Двигаемся вправо со скоростью 3.
И допишем "привычный" код при столкновении со стеной:
Код
if not place_free(x,y+vspeed} and vspeed>0//Если ниже на кол-во пикселей, равных вертикально скорости нет объектов и вертикальная скорость больше нуля... then//То... {vspeed=0 move_contact(270)}//Останавливаем вертикальное перемещение врага.
Вот и все. Закончен даже простенький враг Шаг 3. Лед. Тут все весьма легко. Что нужно на льду? Правильно, чтобы игрок медленно скользил в ту сторону, куда он повернут. Значит создаем obj_ice, присваиваем аналогичный спрайт. Ставим галочку на "Твердый". Родителя объекта ставим "obj_wall" - это нужно для того, чтобы не копировать код столкновения игрока со стеной в код столкновения со льдом. Пишем в step игроку:
Код
if place_meeting(x,y+1,obj_ice)//Если снизу есть лёд... {if image_xscale=-1//И если спрайт повернут влево... hspeed=-0.2//Движение влево со скоростью 0.2 else//В противном случае... hspeed=0.2}//Движение вправо со скоростью 0.2
Вот и лёд готов. Теперь размещайте объекты в комнате - и радуйтесь. Все готово! Эпилог. В этом уроке мы создали более-менее продвинутый движок для платформера. Если вы хотите, что бы я написал тут о чем-то еще, то пишите в тему или ЛС - это будет написано в кратчайшие сроки. До свидания! А звезды, будто мириады стрел, Ловя на мушку силуэты снов. Смеется и злорадствует любовь, И мы с тобой попали в их прицел...
Сообщение отредактировал SpeRdKeaR - Суббота, 14 Июня 2014, 16:13
Иногда, нам нужно сделать рандомное создание объекта в определенных местах
Для этого "рандома" можно найти решение гораздо проще. В create:
Код
instance_create(random(room_height),random)room_width),choose(типа объекты через запятую) alarm[0]=room_speed/2
Тоже самое в Alarm 0. Вот тебе и рандом. Конечно не оптимизированный, но рандом. Хотя у тебя лучше раз в 100. Лови +. А звезды, будто мириады стрел, Ловя на мушку силуэты снов. Смеется и злорадствует любовь, И мы с тобой попали в их прицел...
gagurato, при нажатии левой кнопки мыши уничтожай/отправляй "лесоруба" и давай ресурсы через переменные. Это элементарно А звезды, будто мириады стрел, Ловя на мушку силуэты снов. Смеется и злорадствует любовь, И мы с тобой попали в их прицел...