Game Maker - создание игр | HellRoom Games
Январь 13, 2025, 14:07:36 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.

Войти
Новости:
 
   Начало   Game Maker Помощь Правила форума Поиск Календарь Войти Регистрация  
Страниц: [1] 2   Вниз
  Печать  
Автор Тема: зависает звук  (Прочитано 9782 раз)
0 Пользователей и 1 Гость смотрят эту тему.
alexrainforce
Новичок
*

Репутация: 0
Offline Offline

Пол: Мужской
API: GameMaker Studio 2
Сообщений: 11



« : Январь 13, 2020, 16:51:05 »

Доброго времени суток!
Скажите пожалуйста, как решить данную проблему?
Я в коде хотел сделать так что бы когда счет был больше 100 то тогда должен был создаться объект и воспроизвестись короткий звук.
Все это должно произойти только один раз. К примеру игрок набирает 100 или больше очков, сразу звучит мелодия и появляется объект
один раз. Появляется один бъект и один раз проигрывается звук не в зависимости сколько очков будет дальше собираться. Но программа не понимает что я хочу всего один раз исполнить те действия при тех условиях и повторяет их пока число больше 100.
Как решить данную проблему?
Ниже приведен мой скрипт.


Записан
AndrewVideoGames
Главный Модератор
*

Репутация: 821
Online Online

Пол: Мужской
Награды:
За постоянность! [500 дней на форуме]За лояльность! [+750 репутации]5000 сообщений!За помощь новичкам!
API: GameMaker Studio Pro
Деятельность: А я кто? А я руководитель!
Сообщений: 7316



« Ответ #1 : Январь 13, 2020, 18:28:36 »

Всё правильно, как вы прописали, так и работает, у вас и объектов будет бесконечное множество создаваться с таким кодом. Чтобы этого избежать, можете создать отдельную переменную, которая будет хранить в себе значение того проигрывался звук или нет, можно просто добавить ещё одну проверку в условие, например:
Код:
if (place_meeting(x,y, obj_0))
{
score += 30;
}
if ((score => 100) && (score - 30 < 100))
{
instance_create (2885, 2813, obj_2);
sound_play(sound0);
}

Советую не использовать в коде непонятные значения вроде 30, 100 и особенно 2885 и 2813 – поместите их в переменные, меньше мороки будет потом. Так же, называйте ресурсы осмысленно, что за obj_2, sound0 – никому не понятно, в том числе и вы через какое-то время забудете.

P.S. Для вставки кода на форуме используйте тег [code][/code]
Записан
alexrainforce
Новичок
*

Репутация: 0
Offline Offline

Пол: Мужской
API: GameMaker Studio 2
Сообщений: 11



« Ответ #2 : Январь 13, 2020, 20:02:21 »

Спасибо за ответ, я все это учту.
Сейчас на пятой строке ошибка : "Unexpected symbol in expression"
 
Код:
if ((score => 100) && (score - 30 < 100))
Записан
ГоК
Активный участник
*****

Репутация: 70
Offline Offline

Пол: Мужской
API: GameMaker Studio 2
Сообщений: 278


Аррр


« Ответ #3 : Январь 13, 2020, 20:24:11 »

Маленькая опечатка:
Нужно ">=" вместо "=>"
Записан
alexrainforce
Новичок
*

Репутация: 0
Offline Offline

Пол: Мужской
API: GameMaker Studio 2
Сообщений: 11



« Ответ #4 : Январь 13, 2020, 21:08:33 »

Маленькая опечатка:
Нужно ">=" вместо "=>"

Спасибо, скрипт теперь без ошибок но по прежнему не работает как нужно.
Пытаюсь щас с перемнными придумать что-нибудь.
Записан
AndrewVideoGames
Главный Модератор
*

Репутация: 821
Online Online

Пол: Мужской
Награды:
За постоянность! [500 дней на форуме]За лояльность! [+750 репутации]5000 сообщений!За помощь новичкам!
API: GameMaker Studio Pro
Деятельность: А я кто? А я руководитель!
Сообщений: 7316



« Ответ #5 : Январь 13, 2020, 21:39:57 »

Скидывайте свой полный код, всё должно работать.
P.S. Да, нужно писать ">=", равно добавлял уже после написания остального.
Записан
alexrainforce
Новичок
*

Репутация: 0
Offline Offline

Пол: Мужской
API: GameMaker Studio 2
Сообщений: 11



« Ответ #6 : Январь 13, 2020, 21:48:40 »

Все что смог придумать с переменой...  Хм...только так музыка и объект воспроизводятся единично.
Только вот теперь это идет в ущерб игровым очкам.
Можно ли это как-нибудь исправить?

Код:
scch=1

if (place_meeting(x,y, tea))
{
score += 30;
}
if (score >= 100)
{
scch-=1
instance_create (2885, 2813, back_home);
sound_play(lockout);
}
if cnn<=0
{  score=99 }


P.S. Это весь код в степе который отвечает за очки. Другие коды там отвечают за перемещение гг, его глубину и еще здоровье. В создании вот что есть.
Код:

health=100
globalvar

global.score=0
scii=0  // отвечает за количество патронов
Записан
AndrewVideoGames
Главный Модератор
*

Репутация: 821
Online Online

Пол: Мужской
Награды:
За постоянность! [500 дней на форуме]За лояльность! [+750 репутации]5000 сообщений!За помощь новичкам!
API: GameMaker Studio Pro
Деятельность: А я кто? А я руководитель!
Сообщений: 7316



« Ответ #7 : Январь 13, 2020, 22:19:36 »

На сколько помню, переменная score встроенная в GM, её нельзя объявлять таким образом, используя приставку "global.".

Код, который вы написали максимально странный, откуда переменная cnn? Почему score = 99? Что такое tea? Если объект, то ставьте префикс вроде o_tea / oTea. Что делает пустой globalvar? Почему переменная, отвечающая за количество патронов (странное название и что за патроны?) не используется в коде? Что за переменная scch? Почему каждый шаг она равняется единице? В жизни более странного кода не видел, произведение абстракционизма прям.

Какой результат получается при моём варианте? Сколько раз проигрывается звук и сколько раз создаётся объект (проверяется через instance_number(object)?
Записан
alexrainforce
Новичок
*

Репутация: 0
Offline Offline

Пол: Мужской
API: GameMaker Studio 2
Сообщений: 11



« Ответ #8 : Январь 13, 2020, 22:27:15 »

Спасибо за помощь и за указания на ошибки. А то я сам не понимаю что там происходит. Это мой третий день просто с того момента как я учу и пытаюсь писать в gml.
 Я все это попробую исправлю и  завтра отпишусь о. о том что вышло. Доброй ночи.

Добавлено: Январь 14, 2020, 06:13:31
убрал значение global перед score(я прописывал global потому что количество очков сохранялось при переходе в другую комнату только в
этом случае.
Сейчас все заработало иначе.
При старте пока очков 0 начинает выполняется та условная при которой должны создаваться те объекты. И создаются они без остановки до тех пор как очков не будет больше чем 100. После того как я набиру очков больше ста то звук замолкает.
Код:
if (place_meeting(x,y, o_tea))
{
score += 30;
}
if ((score <= 100) && (score - 30 < 100))
{
instance_create (2885, 2813, o_backhome);
sound_play(lockout);
}
« Последнее редактирование: Январь 14, 2020, 06:14:35 от alexrainforce » Записан
AndrewVideoGames
Главный Модератор
*

Репутация: 821
Online Online

Пол: Мужской
Награды:
За постоянность! [500 дней на форуме]За лояльность! [+750 репутации]5000 сообщений!За помощь новичкам!
API: GameMaker Studio Pro
Деятельность: А я кто? А я руководитель!
Сообщений: 7316



« Ответ #9 : Январь 14, 2020, 15:40:57 »

Это происходит, потому что вы написали "score <= 100" вместо "score >= 100".
Записан
alexrainforce
Новичок
*

Репутация: 0
Offline Offline

Пол: Мужской
API: GameMaker Studio 2
Сообщений: 11



« Ответ #10 : Январь 14, 2020, 17:06:58 »

Спасибо, я попробую.
Можете объяснить пожалуйста как именно работает данный скрипт? Какое его значение? Что он задает?
Код:
((score >= 100) && (score - 30 < 100))


Записан
SilentPhil
Norland
GM Pro user
*

Репутация: 479
Offline Offline

Пол: Мужской
Награды:
Первое место на HellRoom Jam #7 [Hell in Your Fridge]500 сообщений!За постоянность! [50 дней на форуме]За лояльность! [+150 репутации]Настоящий игродел!Второе место на HellRoom Jam #6 [По следам Артакса]...
API: GameMaker Studio 2
Деятельность: GML, Pixel Art
Сообщений: 1363



WWW
« Ответ #11 : Январь 15, 2020, 09:12:37 »

Вы же можете прочитать эти два выражения? Вслух. При чтении замените "&&" на "И", "if" на "ЕСЛИ", а "{" на "ТО"
Код:
если (score >= 100) и (score - 30 < 100), то

Для еще бОльшего понимания нужно упростить второе выражение до
Код:
score < 130
Я просто перенес -30 на другую сторону сменив знак - простейшая математика.

Итого получилось:
Код:
если (score >= 100) и (score < 130), то

Стало понятнее?
Записан

         
Да, на них можно кликать.
alexrainforce
Новичок
*

Репутация: 0
Offline Offline

Пол: Мужской
API: GameMaker Studio 2
Сообщений: 11



« Ответ #12 : Январь 15, 2020, 10:20:00 »

Спасибо за разъяснения. Теперь все понял

Добавлено: Январь 17, 2020, 08:06:26
Вот таким способом только получилось что бы все выполнялось как нужно

Код:
if (place_meeting(x,y, o_tea))

{
t+=30;
score += 1;
}

if t>=100

{
instance_create (2885, 2813, o_backhome);
sound_play (lockout);
t=-100
}

Изначально была плохой идей выполнять какое-то действие при определенном количестве очков.
Сейчас очки у меня отдельно засчитываются. А для того, что бы выполнилось действие, помогают переменные.

На англоязычных форумах копался так и не нашел ответ о том, как выполнить действие один раз при определённом условии.

Вариант с ()and() не помогает, возможно я что то не так сделал, хотя все перепроверял.
« Последнее редактирование: Январь 17, 2020, 08:06:26 от alexrainforce » Записан
Dmi7ry
Гл. Администратор
*

Репутация: 1379
Offline Offline

Пол: Мужской
Награды:
5000 сообщений!За постоянность! [200 дней на форуме]За лояльность! [+1000 репутации]За помощь в развитии форума!Знаток Game Maker!За помощь новичкам!
API: GameMaker Studio Master
Деятельность: Code, design
Сообщений: 6626



WWW
« Ответ #13 : Январь 17, 2020, 10:43:38 »

Чтобы однократно выполнить действие, нужно завести переменную, которая будет содержать информацию о том, выполнялось ли это действие.
create:
Код: (Create)
action = false; // действие не выполнялось

действие:
Код:
if !action and ...
{
    action = true; // действие выполнено
    ...
}
где вместо многоточия идут ваши проверки и код самого действия
Записан

- А какой, собственно, командой процессора колобок ест черта?
- Командой EAT...
Справка и FAQ в правом верхнем углу...
alexrainforce
Новичок
*

Репутация: 0
Offline Offline

Пол: Мужской
API: GameMaker Studio 2
Сообщений: 11



« Ответ #14 : Январь 17, 2020, 11:07:25 »

Спасибо за ответ. Я кстати тоже думал насчет true и false. Эксперементировал с этим. Видимо что-то не так тогда делал. Сейчас попробую как вы сказали.
Записан
Страниц: [1] 2   Вверх
  Печать  
 
Перейти в:  

HellRoom Games © 2006-2012 All Rights Reserved
Powered by SMF 1.1.21 | SMF © 2013, Simple Machines
Страница сгенерирована за 0.107 секунд. Запросов: 31.