|
Название: Создание Бега/Ходьбы Отправлено: Grim от Октябрь 01, 2011, 14:50:30 Мой первый урок для всех 8))
Почитал темы на форуме и не нашел такой. Вроде как не объяснялось нигде, а вещь довольно таки полезная для разных жанров.(не все темы просмотрел уж извольте 8(( ниасилю столько читать) что в уроке: Итак, начнем: 1)Для того чтобы передвинуть вашего героя, как я понял, есть уйма способов. Мне самым удачным кажется функция Код: if place_free(x-4,y) then x-=4 поэтому давайте в событии клавиатуры для кнопки Left пропишем этот код. И такой же код пропишем в том же собитии только для кнопки Right и соответственно поменяем два минуса перед четверками на плюсы. готово, наш герой бегло двигается влево и вправо. Но что если противник обладает такой же скоростью(в данном случае скорость 4?) или даже чуть большей? Это not будет значить неизбежную смерть нашего героя, он сможет убежать если в код добавить еще одну небольшую строчку ;) Код: if keyboard_check(ord('X')) && place_free(x-4,y) then x-=2 для левой кнопки и естественно таже строчка только с плюсами для правой кнопки. примерно тоже самое можно создать и практически без кода. В событии нажатой кнопки вверх ставим квадрат с 8 стрелками и задаем движение вверх со скоростью 4 ставим этот квадрат между двумя треугольниками дальше ставим "else" и между еще двумя треугольниками ставим 8угольник со знаком вопроса и вот тут то и заминка. там придется написать " keyboard_check(ord('X')) " и нажать окей. а следом вставит квадрат со стрелками и приказать герою двигаться вверх пошустрее 2)Чтож мы тут такого понаделали? все просто: герой двигается в 4 стороны сделано двумя способами чтобы поняли и новички которые могут не сразу вникнуть в код хоть и довольно простой строчка if place_free(x,y) неоднакратно обсуждалась на форуме ее опустим. единственно что, так это при нажатии кнопки "x" и стрелки мы пишем не 6(скорость которая нам нужна) а 2, потому что мы прибавляем 2 к уже имеющимся 4м. check_keyboard(ord('X')) это функция проверки нажата ли та или иная клавиша. В данном случае это: ord('X') тоесть клавиша "x" . Код каждой клавиши написан в стандартном хелпе в разделе GML 3)Что же лучше? тут уж как вам нравится 8) можно повозится и поэксперементировать с квадратами и сделать ровные послушные движения 4)Люди знающие дальше у меня вопрос к вам 8) посмотрите нижеприведенный код и выразите свое мнение плз. критика/похвала но обоснованно 8)) Название: Re: Создание Бега/Ходьбы Отправлено: Dmi7ry от Октябрь 01, 2011, 18:37:26 Я бы сделал так:
В step объекта: Код: stepx=0; stepy=0 if (keyboard_check(vk_shift)) { step=8 } else { step=4 } if (keyboard_check(vk_left)) { stepx-=step } if (keyboard_check(vk_right)) { stepx+=step } if (keyboard_check(vk_up)) { stepy-=step } if (keyboard_check(vk_down)) { stepy+=step } if (place_free(x+stepx,y+stepy)) { x+=stepx; y+=stepy } Если нужно добавить проверку, чтобы не выходить за пределы комнаты, то ниже добавляем: Код: if (x<0) { x=0 } if (x>room_width-sprite_width) { x=room_width-sprite_width } if (y<0) { y=0 } if (y>room_height-sprite_height) { y=room_height-sprite_height } В вашем же коде получается 4 проверки на столкновение, вместо одной в моём коде. И он более прост для восприятия. Название: Re: Создание Бега/Ходьбы Отправлено: Server313 от Октябрь 01, 2011, 18:40:25 А 16 сторон можно?
Название: Re: Создание Бега/Ходьбы Отправлено: Dmi7ry от Октябрь 01, 2011, 18:45:18 А 16 сторон можно? С клавиатуры? Это не удобно.А с мышки - элементарно. Добавлено: Октябрь 02, 2011, 06:29:32 Код: { if keyboard_check(vk_left) && x > 0 && place_free(x-4,y) then x -= + walk if keyboard_check(vk_right)&& x < room_width -32 && place_free(x+4,y) then x -= - walk else if keyboard_check(vk_left)&& x > 0 && keyboard_check(ord('X')) && place_free(x-4,y) then x-= +run if keyboard_check(vk_right)&& x < room_width -32 && keyboard_check(ord('X')) && place_free(x+4,y) then x-= -run } 1. если (нажата влево) и (X>0) и (слева никого нет), значит перемещаем влево 2. если (нажата вправо) и (не вылезли за правый край комнаты) и (справа никого нет), идём вправо ИНАЧЕ если (нажата влево) и (X>0) и (нажата X) и (слева никого нет), значит перемещаем влево 3. если (нажата вправо) и (не вылезли за правый край комнаты) и (нажата X) и (справа никого нет), значит перемещаем вправо Во-первых, если нажать влево и X, то действие на клавишу влево будет исполнено два раза - в первой строке и во второй. Во-вторых, не понятно, зачем нужно двойное преобразование знаков: Код: x -= + walk если более логично будет сделатьx -= - walk Код: x-=walk То же самое с run.x+=walk В-третьих, если переменные run и walk не равны, то нужно в проверке свободного места использовать разные значения, а не 4, как у вас, в обоих случаях. Если же они равны, то нет необходимости использовать две переменные вместо одной. В-четвёртых, вообще не очень понятно какая логика должна была быть у вашего кода. вариант 1: 1. если стрелка нажата, то смещаем героя на 4 точки 2. если нажата X, то смещаем ещё на 2 (например) точки вариант 2: 1. если стрелка нажата, но не нажата X, то смещаем на 4 точки 2. если стрелка нажата и нажата X, то смещаем на 6 (например) точек Смущает ваше непонятное else. Склоняюсь всё же к тому, что вы планировали вариант 1, судя по вашему примеру. Но в любом из вариантов, логика построения программы немного не правильная. |