Вопрос - Ответ (Game Maker)
| |
LunarPixel | Дата: Четверг, 03 Марта 2011, 08:27 | Сообщение # 1041 |
старожил
Сейчас нет на сайте
| Вот тебе примерчик: ССЫЛКА Не самый хороший вариант, просто первое что пришло в голову. Для закрытия игры жми кнопку "Выход", если игра будет выключена другим способом, то при следующем запуске появится окно, которое спросит, хочешь ли ты восстановить игру, т.е. продолжить с того места на котором остановился. P.S. Кубик движется только вправо, для теста.
Сообщение отредактировал LunarPixel - Четверг, 03 Марта 2011, 08:28 |
|
| |
GameMix | Дата: Четверг, 03 Марта 2011, 11:12 | Сообщение # 1042 |
старожил
Сейчас нет на сайте
| Здравствуйте. Помогите, пожалуйста, решить несколько вопросов: 1) Создал в игре пушку, которая вращается на 360o. Точка (x,y) спрайта пушки по центру. "lengthdir" немного усвоил, с одной пушкой по центру сделал. Пытался сделать такую же, но с двумя пушками и наткнулся на косяк: она стреляет то ровно, из дула, то где-то сбоку. Примерный спрайт пушки: Код создания пули около пушки: Code instance_create(x+lengthdir_x(30,image_angle+90)-10,y+lengthdir_y(30,image_angle+90),o_tur1_pulya); // выстрел из левого дула Если пушка стреляет вверх, пули летят ровно из дула, если же поворачивается на угол 0o (направо) - косит. Пули создаются между двух стволов. 2) Выражение после проверки почему-то выполняется не полностью. Если игрок подходит близко к пушке, она вращается но не запускает Alarm0. Перепроверял, но так и не понял в чем проблема . Скрипт объекта пушки: step: if instance_number(first_player) > 0 if point_distance(x,y,first_player.x+first_player.sprite_width/2,first_player.y+first_player.sprite_height/2) < 350 and !collision_line(x,y,first_player.x+first_player.sprite_width/2,first_player.y+first_player.sprite_height/2,kirpich,1,1) and !collision_line(x,y,first_player.x+first_player.sprite_width/2,first_player.y+first_player.sprite_height/2,block,1,1) { image_angle=point_direction(x,y,first_player.x+first_player.sprite_width/2,first_player.y+first_player.sprite_height/2)-90; alarm[0] = 6; } Alarm0: instance_create(x+lengthdir_x(30,image_angle+90)-10,y+lengthdir_y(30,image_angle+90),o_tur1_pulya); alarm[0] = 6;
Steel Standoff - 2D аркада. Мои статьи
|
|
| |
LunarPixel | Дата: Четверг, 03 Марта 2011, 11:24 | Сообщение # 1043 |
старожил
Сейчас нет на сайте
| По второму вопросу: Дело в том, что пока у тебя выполняются все условия, alarm каждый шаг начинает отсчет с самого начала и не может досчитать до конца. Первое решение которое приходит в голову: Создаешь переменную Peremen=0 if instance_number(first_player) > 0 if point_distance(x,y,first_player.x+first_player.sprite_width/2,first_player.y+first_player.sprite_height/2) < 350 and !collision_line(x,y,first_player.x+first_player.sprite_width/2,first_player.y+first_player.sprite_height/2,kirpich,1,1) and !collision_line(x,y,first_player.x+first_player.sprite_width/2,first_player.y+first_player.sprite_height/2,block,1,1) { image_angle=point_direction(x,y,first_player.x+first_player.sprite_width/2,first_player.y+first_player.sprite_height/2)-90; if Peremen=0 { alarm[0] = 6; Peremen=1;} } Таким образом таймер будет срабатывать только один раз. Если нужно чтобы действие повторялось, то в событие alarm0 допиши: Peremen=0; Должно сработать.
Сообщение отредактировал LunarPixel - Четверг, 03 Марта 2011, 11:25 |
|
| |
Riketta | Дата: Четверг, 03 Марта 2011, 11:33 | Сообщение # 1044 |
Strategist
Сейчас нет на сайте
| 1. Скажу одно.... А случаем спрайт не в право должен быть повернут?
Fougerite - Rust Server OpenSource API TerraDev - Terraria OpenSource Hack
|
|
| |
LunarPixel | Дата: Четверг, 03 Марта 2011, 11:51 | Сообщение # 1045 |
старожил
Сейчас нет на сайте
| По первому вопросу: Можно попробовать сделать так, создать спрайт для пуль вот таким образом: Если наложить этот спрайт на пушку, то пули окажутся прямо у концов стволов. И просто поворачивать этот спрайт при выстреле на тот же угол на который повернута пушка. Аналогично можно сделать пули по отдельности. Посто потребуется отдельный спрайт для каждой из двух пуль. Тогда ничего высчитывать не нужно будет, пули должны появляться там где надо. Добавлено (03.03.2011, 11:51) --------------------------------------------- Riketta, спрайт может быть в любую сторону повернут... главное определить с какого угла начинать отсчет.. Как по мне, то вправо повернуть удобнее конечно...
|
|
| |
NeZnayu | Дата: Четверг, 03 Марта 2011, 11:55 | Сообщение # 1046 |
__танцуй!__
Сейчас нет на сайте
| LunarPixel, способ не очень, т.к. ГМу придется высчитывать маску столкновений для большого спрайта, который содержит всего два маленьких элемента. Народ, учитесь пользоваться lengthdir_x(), lengthdir_y()
CombatForce - 2d TDS долгожданный релиз Noobster - самый простой конструктор игр в мире LaLaLaLAMA! - игра не про Ламу
|
|
| |
LunarPixel | Дата: Четверг, 03 Марта 2011, 12:00 | Сообщение # 1047 |
старожил
Сейчас нет на сайте
| NeZnayu, да, способ конечно не очень, но как вариант вполне может подойти... Да и маску ведь можно (да и нужно) изменить... сделать чтобы она охватывала только эти два объекта, но безусловно способ не самый хороший... Просто плюс в том, что задумываться над расчетами не придется.
|
|
| |
GameMix | Дата: Четверг, 03 Марта 2011, 12:05 | Сообщение # 1048 |
старожил
Сейчас нет на сайте
| Quote (LunarPixel) вправо повернуть удобнее конечно... Это я знаю. Не зря же в коде встречается "+90", "-90". Quote (LunarPixel) Можно попробовать сделать так, создать спрайт для пуль вот таким образом: Можно, конечно, но это ограничит меня в добавлении, например, возможности получения визуальных повреждений пушкой (полуразрушенная пушка стреляет только из одного дула). По поводу первого вопроса. Дело в том, что у меня получается так: если игрок подходит близко к пушке, она поворачивается в его сторону, но не стреляет. Однако, при отдалении от пушки более чем на 350 пикселей, она начинает стрелять как нужно (хотя не должна стрелять вообще), но уже не следит за игроком (не вращается. Так и задумано). Как тогда быть? Добавлено (03.03.2011, 12:05) ---------------------------------------------
Quote (NeZnayu) Народ, учитесь пользоваться lengthdir_x(), lengthdir_y() Вот я, собственно, и учусь .
Steel Standoff - 2D аркада. Мои статьи
|
|
| |
LunarPixel | Дата: Четверг, 03 Марта 2011, 12:12 | Сообщение # 1049 |
старожил
Сейчас нет на сайте
| step: Code if instance_number(first_player) > 0 if point_distance(x,y,first_player.x+first_player.sprite_width/2,first_player.y+first_player.sprite_height/2) < 350 and !collision_line(x,y,first_player.x+first_player.sprite_width/2,first_player.y+first_player.sprite_height/2,kirpich,1,1) and !collision_line(x,y,first_player.x+first_player.sprite_width/2,first_player.y+first_player.sprite_height/2,block,1,1) { image_angle=point_direction(x,y,first_player.x+first_player.sprite_width/2,first_player.y+first_player.sprite_height/2)-90; if Peremen=0 { alarm[0] = 6; Peremen=1;} } Alarm0: Code instance_create(x+lengthdir_x(30,image_angle+90)-10,y+lengthdir_y(30,image_angle+90),o_tur1_pulya); Peremen=0; Вроде ничего не напутал... Добавлено (03.03.2011, 12:12) --------------------------------------------- Ну и в create:
|
|
| |
GameMix | Дата: Четверг, 03 Марта 2011, 12:18 | Сообщение # 1050 |
старожил
Сейчас нет на сайте
| LunarPixel, сейчас проверю . Добавлено (03.03.2011, 12:18) --------------------------------------------- Проверил, все работает отлично! Просто хотел обойтись без переменных, через Alarm. Вижу без них не обойтись . Спасибо, +!
Steel Standoff - 2D аркада. Мои статьи
|
|
| |
NeZnayu | Дата: Четверг, 03 Марта 2011, 12:21 | Сообщение # 1051 |
__танцуй!__
Сейчас нет на сайте
| Quote (аТнОтХоАн) Дело в том, что у меня получается так: если игрок подходит близко к пушке, она поворачивается в его сторону, но не стреляет. Однако, при отдалении от пушки более чем на 350 пикселей, она начинает стрелять как нужно (хотя не должна стрелять вообще), но уже не следит за игроком (не вращается. Так и задумано). Как тогда быть? if distance_to_object(PLAYER)<350 {image_angle=point_direction(x,y,PLAYER.x,PLAYER.y);} if distance_to_object(PLAYER)<250 {//стреляем} Чтобы пушка стреляла двумя пулями: Нужно все-таки развернуть картинку спрайта направо (дабы не путаться) Создание пули: bullet1=instance_create(x+lengthdir_x(24,image_angle+15),y+lengthdir_y(24,image_angle+15),BULLET); bullet2=instance_create(x+lengthdir_x(24,image_angle-15),y+lengthdir_y(24,image_angle-15),BULLET); Красным цветом обозначен угол отклонения (в градусах), зеленым расстояние от центра до дула (в пикселях). Цифры я взял из головы.
CombatForce - 2d TDS долгожданный релиз Noobster - самый простой конструктор игр в мире LaLaLaLAMA! - игра не про Ламу
Сообщение отредактировал NeZnayu - Четверг, 03 Марта 2011, 12:24 |
|
| |
GameMix | Дата: Четверг, 03 Марта 2011, 12:31 | Сообщение # 1052 |
старожил
Сейчас нет на сайте
| Quote (NeZnayu) bullet1=instance_create(x+lengthdir_x(24,image_angle+15),y+lengthdir_y(24,image_angle+15),BULLET); bullet2=instance_create(x+lengthdir_x(24,image_angle-15),y+lengthdir_y(24,image_angle-15),BULLET); Сразу обнаружил ошибку. У вас получается, что две пули вылетают из одного, правого, дула. Немного поменял: x-lengthdir_x(24,image_angle+15). Уже лучше, но проблема та же, что я описывал в этом вопросе - пули летят то из дула, то с центра точки между дулами.
Steel Standoff - 2D аркада. Мои статьи
Сообщение отредактировал аТнОтХоАн - Четверг, 03 Марта 2011, 12:34 |
|
| | |
NeZnayu | Дата: Четверг, 03 Марта 2011, 12:46 | Сообщение # 1054 |
__танцуй!__
Сейчас нет на сайте
| Quote (аТнОтХоАн) Сразу обнаружил ошибку. У вас получается, что две пули вылетают из одного, правого, дула. Я не знаю почему у тебя они вылетают из одного дула, значит ты где-то накосячил. Скачать пример
CombatForce - 2d TDS долгожданный релиз Noobster - самый простой конструктор игр в мире LaLaLaLAMA! - игра не про Ламу
|
|
| |
GameMix | Дата: Четверг, 03 Марта 2011, 14:35 | Сообщение # 1055 |
старожил
Сейчас нет на сайте
| Quote (NeZnayu) Я не знаю почему у тебя они вылетают из одного дула, значит ты где-то накосячил. Точно накосячил. Опять же из-за невнимательности не заметил, что созданная пуля равна переменной. Спасибо за пример, буду разбираться в скрипте .
Steel Standoff - 2D аркада. Мои статьи
|
|
| |
LordZick | Дата: Четверг, 03 Марта 2011, 18:19 | Сообщение # 1056 |
участник
Сейчас нет на сайте
| Опять я! Игрок подключается к серверу, появляется на сервере. Всё там работает, игрок ходит, чат пишет, но когда на сервер заходит другой игрок, его не показывает в первом, во втором, третем и т.д. клиентах. Тоесть игра оффлайн, хоть в чате пишет, что новый игрок подключился. Я думаю что всё это из-за сервера, потому что он не отправляет "байт новый игрок". В степе объекта сервер написано: Code global.clienttcpsocket = tcpaccept(global.listeningsocket,true) //If someone tries to connect accept him if global.clienttcpsocket //If someone connected { playerid = newplayerid(); //generate player id if(playerid < 0)exit; //if too many players i = instance_create(0, 0, objPlayer); //create object for player i.socketid = player; //Set socket id for player to the socket that was just accepted i.playerid = playerid; players[playerid] = i; setnagle(player, false); //turn off nagle algorithm for socket //Tell all players that i joined clearbuffer(); writebyte(newplayer); //Write message id writebyte(playerid); //Write the new players PlayerId writeshort(0); writeshort(0); writestring("", true); //Send to all other players with(objPlayer) { if(id != other.i) { sendmessage(socketid); } } //Tell me all the players that have already joined with(objPlayer) { if(id != other.i) { clearbuffer(); writebyte(playerid); writebyte(newplayer); writeshort(x); writeshort(y); writestring(nick, true); sendmessage(other.player); //send to me } } } В клиенте в objControl (степ) написано: Code while(1) //Start infinite loop { { instance_destroy(); break; } mid = readbyte(); //read message id
switch(mid) { case newplayer: pid = readbyte(); //read playerid player = instance_create(0, 0, objRemote); //create instance of objRemote (remote player) player.x = readshort(); player.y = readshort(); player.nick = readstring(); players[pid] = player; //Add instance to playerlist break;
case playerlocation: player = players[readbyte()]; //get id of player from playerlist player.x = readshort(); //set x player.y = readshort(); //set y break;
case exitgame: player = players[readbyte()]; //get id of player from playerlist with(player)instance_destroy(); //destroy break;
case playernick: player = players[readbyte()]; //get id of player from playerlist player.nick = readstring(); //set nickname break; } } Если что, пример взял Massively Multiplayer Online Engine Там не было объекта игрока. Я сам его сделал, смотря на другие примеры Я ничего не понял, в чём проблема? Может это очень далеко от сервера и от objControl в клиенте?
|
|
| |
BaHu3aTop | Дата: Суббота, 05 Марта 2011, 08:04 | Сообщение # 1057 |
постоянный участник
Сейчас нет на сайте
| Как сделать чтобы ГГ стрелял в стену, а спрайт стены разрезался по полам где прошла пуля
|
|
| |
VocalMix | Дата: Понедельник, 07 Марта 2011, 16:57 | Сообщение # 1058 |
постоянный участник
Сейчас нет на сайте
| Добрый день. Я совсем недавно начал работать с GML и вот, что получилось: Первое, что хочу спросить - в воздухе, персонаж способен атаковать чаще чем стоя на платформе. У меня получилось, вправо правильно, а влево не очень т.е. атака происходит, то налево, то направо. Почему? Подскажите пожалуйста! Второе - можно этот код как-нибудь упростить т.е. иначе сформулировать в более удобную форму для записи, сохранив при этом, те же функции? P. S. хотя этот код довольно прост для опытных пользователей, но я новичок, и поэтому возникают подобные вопросы :o)
Бложик: http://mus-vocalmix.blogspot.ru
Сообщение отредактировал VocalMix - Понедельник, 07 Марта 2011, 19:29 |
|
| |
LordZick | Дата: Вторник, 08 Марта 2011, 13:50 | Сообщение # 1059 |
участник
Сейчас нет на сайте
| Здрасте! Я не знаю как реализовать скелетную анимацию! Может кто-нибудь мне помочь в этом? Я в google, yandex и на rambler искал, но ничего не нашло, кроме флеш анимации!
|
|
| |
Made_In_USSR | Дата: Вторник, 08 Марта 2011, 15:35 | Сообщение # 1060 |
заслуженный участник
Сейчас нет на сайте
| Учимся пользоваться поиском!
Новичкам изучающим GML кликать сюда. Много примеров, исходников, библиотек и вообще всего что вам только может пригодиться. Автор портала, прости меня за ссылку, наболело =)
|
|
| |
|