درود مهمان گرامی! ثبت نام

امتیاز موضوع:
  • 0 رأی - میانگین امتیازات: 0
  • 1
  • 2
  • 3
  • 4
  • 5
مشکل صدا هنگام برخورد
#1
سلام
پلیرم با کلید چپ و راست یک حرکت ساده ی رفت و برگشتی داره.
وقتی با دشمن که در path مستقیم رفت و برگشتی برخورد میکنه گفتم یک صدای هنگام برخورد پخش کنه.
مشکل:صدا چندین بار و نه بصورت( کامل و یکبار ) پخش نمیشه. خیلی هم گوشخراش و نکره sick
درست مثل اینکه داره چندین برخورد رو محاسبه میکنه و هی پخش میکنه.
تکرار پخش نزدم(false)
انگار چندین برخورد رو حساب میکنه و هی هنوز صدای برخورد اول تموم نشده داره دومی رو پخش میکنه cry

گفتم پلیرم رو برای چند ثانیه که برخورد داره انجام مشه (تا وقتی از روی هم رد بشن و تموم بشه)مثلا سبز یا محو بشه یا کلا بشه یه کاراکتر دیگه!که شاید چون کارکترم تغییر کرد دیگه برخورد رو محاسبه نکنه.اما نمیدونم چطور بگم وقتی برخورد تموم شد به همون کاراکتر اولی برگرد؟

الان به نظرتون چه کنم؟؟؟؟؟
پاسخ
#2
به روش های مختلفی میشه مشکل شما رو حل کرد .
برای اینکه صدا چندین بار در یک لحظه پخش نشه باید به آبجکت بگیم که اگه اون صدا در حال پخش نبود ، پخشش کن .
اسم فایل صدا رو snd فرض میکنیم ، و توی رویداد برخورد ، این کد رو مینویسیم :


(if ! sound_play(snd
{ (audio_play_sound(snd , 1 , 0 }

کدی که توی بخش دوم هست 3 تا پارامتر داره ، که جهت اطلاع توضیح میدم .
بخش اول اسم صدا وارد میشه .
بخش دوم لایه ی صدا هست . ( مثل عمق آبجک ، که هرچی بیشتر باشه ، آبجکت میره زیر آبجکت هایی که عمقشون کمتره )
بخش سوم هم حالت تکرار هست که اگه 1 باشه یعنی میخواید صدا هی تکرار داشته باشه و اگه 0 باشه ، صدا فقط یک بار بخش میشه . به جای 1 و 0 ، میتونید true و false هم بذارید .

امیدوارم واسه تون مفید باشه .
پاسخ
 سپاس شده توسط qwerty13
#3
(2/1/1398، 01:22 عصر)asi123 نوشته است: درست مثل اینکه داره چندین برخورد رو محاسبه میکنه و هی پخش میکنه.


سلام،
خب قضیه دقیقا همینه یعنی هر لحظه برخورد حس میشه و صدا پخش میشه؛ اگر میخواید بازیکن رو نامرئی کنید میتونید اسپرایتش رو عوض کنید و هیچی بذارید (یادم نمیاد امکانش بود یا نه) یا اسپرایت خالی ایجاد کنید و اونو بذارید.
توی رویداد برخورد با دشمن اسپرایتش رو با اسپرایت خالی تعویض کنید و یک آلارم هم تنظیم کنید برای مثلا 2 ثانیه بعد؛ داخل اون آلارم دوباره اسپرایتش رو به اصلی تغییر بدید...
کیــــــــــ qwerty13 ـــــــوورتی13
پاسخ
 سپاس شده توسط MiladKaydi
#4
(2/1/1398، 03:28 عصر)MiladKaydi نوشته است: به روش های مختلفی میشه مشکل شما رو حل کرد .
برای اینکه صدا چندین بار در یک لحظه پخش نشه باید به آبجکت بگیم که اگه اون صدا در حال پخش نبود ، پخشش کن .
اسم فایل صدا رو snd فرض میکنیم ، و توی رویداد برخورد ، این کد رو مینویسیم :


(if ! sound_play(snd
{ (audio_play_sound(snd , 1 , 0 }

کدی که توی بخش دوم هست 3 تا پارامتر داره ، که جهت اطلاع توضیح میدم .
بخش اول اسم صدا وارد میشه .
بخش دوم لایه ی صدا هست . ( مثل عمق آبجک ، که هرچی بیشتر باشه ، آبجکت میره زیر آبجکت هایی که عمقشون کمتره )
بخش سوم هم حالت تکرار هست که اگه 1 باشه یعنی میخواید صدا هی تکرار داشته باشه و اگه 0 باشه ، صدا فقط یک بار بخش میشه . به جای 1 و 0 ، میتونید true و false هم بذارید .

امیدوارم واسه تون مفید باشه .
سپاس. کد خط دوم رو اشتباه میزنه!
اما من مشکلی با 0 و 1 ندارم.یا true و false  .کلا بدون تکرار رو میزنم .میخوام وقتی برخورد میکنه تا زمانی که ااز روی هم رد میشن که یه مدت زمانی میشه،چندین برخورد رو حساب نکنه.فقط یه برخورد تا یکبار صدا رو پخش کنه.فکر کنم بد متوجه ی مشکلم شدید!؟
پاسخ
#5
(2/1/1398، 03:37 عصر)qwerty13 نوشته است:
(2/1/1398، 01:22 عصر)asi123 نوشته است: درست مثل اینکه داره چندین برخورد رو محاسبه میکنه و هی پخش میکنه.


سلام،
خب قضیه دقیقا همینه یعنی هر لحظه برخورد حس میشه و صدا پخش میشه؛ اگر میخواید بازیکن رو نامرئی کنید میتونید اسپرایتش رو عوض کنید و هیچی بذارید (یادم نمیاد امکانش بود یا نه) یا اسپرایت خالی ایجاد کنید و اونو بذارید.
توی رویداد برخورد با دشمن اسپرایتش رو با اسپرایت خالی تعویض کنید و یک آلارم هم تنظیم کنید برای مثلا 2 ثانیه بعد؛ داخل اون آلارم دوباره اسپرایتش رو به اصلی تغییر بدید...
اگه از change sprite بدون هیچ شخصیتی استفاده کنم حذف میشه و بعد چند ثانیه ظاهر شد اما مشکل صدا برطرف نشد.
اگه از change instance استقاده کنم بعدش اصلا ظاهر نمیشه.(دقیقا همون کار خط بالا رو انجام دادم که ظاهر میشد،الان ظاهر نمیشه) 
اگه از create instance استفاده کنم مشکل محل ظاهر شدنش هست که فقط یه مکان نیست بخوام مختصات بدم؟!
فکر کنم برای مورد دوم یه چیزی رو اشتباه میزنم.
event برخورد و بعد اکشن change instance و اکشن الارم0 با زمان10 و اکشن صدا
event الارم0 بعد اکشن change instance
حالا مشکل چیه نمیدونم؟
پاسخ
#6
(2/1/1398، 01:22 عصر)asi123 نوشته است: سلام
....
رفتم پلیرم رو برای چند ثانیه که برخورد داره انجام مشه (تا وقتی از روی هم رد بشن و تموم بشه)مثلا سبز یا محو بشه یا کلا بشه یه کاراکتر دیگه!...

الان به نظرتون چه کنم؟؟؟؟؟

سلام...پیشنهاد میکنم کد رو بزاری ک بشه بهتر راهنمایی کرد...
اما همین بخش از پیام شما مشخص میکنه که مشکل از کجاست!!!... شما برای چند ثانیه برخورد دارید ک برای هر لحظه از این زمان (یک step) اون صدا پخش میشه و دقیقا هم این صدا ها رو هم می افتن و به قول شما گوش خراش میشه...
معمولا باید از یکی دو تا متغیر کمکی استفاده کنی...ولی اگ فقط میخوای یه صدا پخش بشه میتونی شبیه عمل زیر انجام بدی : 
کد:
if (collision) {
if(audio_is_playing(snd) == false) {
audio_play_sound(snd, 1, false);
}
}

کد بالا اگ برخوردی اتفاق بیفته بدنه رو اجرا میکنه ... collision زمانی ک برخورد اتفاق می افته true کن...
بدنه کد هم میگه اگ همون صدایی ک میخوای پخش کنی در حال پخش نباشه، پخشش کن و اگ درحال بخش باشه شرط محقق نمیشه و  بدنه if داخلی اجرا نمیشه...

...............
اگ حل نشد کد رو بزار...
پاسخ
 سپاس شده توسط asi123
#7
(2/1/1398، 09:24 عصر)hisalam نوشته است:
(2/1/1398، 01:22 عصر)asi123 نوشته است: سلام
....
رفتم پلیرم رو برای چند ثانیه که برخورد داره انجام مشه (تا وقتی از روی هم رد بشن و تموم بشه)مثلا سبز یا محو بشه یا کلا بشه یه کاراکتر دیگه!...

الان به نظرتون چه کنم؟؟؟؟؟

سلام...پیشنهاد میکنم کد رو بزاری ک بشه بهتر راهنمایی کرد...
اما همین بخش از پیام شما مشخص میکنه که مشکل از کجاست!!!... شما برای چند ثانیه برخورد دارید ک برای هر لحظه از این زمان (یک step) اون صدا پخش میشه و دقیقا هم این صدا ها رو هم می افتن و به قول شما گوش خراش میشه...
معمولا باید از یکی دو تا متغیر کمکی استفاده کنی...ولی اگ فقط میخوای یه صدا پخش بشه میتونی شبیه عمل زیر انجام بدی : 
کد:
if (collision) {
if(audio_is_playing(snd) == false) {
audio_play_sound(snd, 1, false);
}
}

کد بالا اگ برخوردی اتفاق بیفته بدنه رو اجرا میکنه ... collision زمانی ک برخورد اتفاق می افته true کن...
بدنه کد هم میگه اگ همون صدایی ک میخوای پخش کنی در حال پخش نباشه، پخشش کن و اگ درحال بخش باشه شرط محقق نمیشه و  بدنه if داخلی اجرا نمیشه...

...............
اگ حل نشد کد رو بزار...

سلام.من از کد استفاده نمیکنم.از اکشن خود بازی استفاده میکنم. عکس گرفتم میفرستم.کد شما رو در event برخورد (هم با  step امتحان کردم)گذاشتم خط چهارم خطا میزنه.


فایل‌(های) پیوست شده
.jpg   Untitled.jpg (اندازه: 266.44 KB / تعداد دفعات دریافت: 9)
پاسخ
#8
مهندس ورژن نرم افزار 8  ک ...از دستور من هم به صورت اشتباه استفاده کردی ...چون مستقیما تو رویداد برخورد نوشتی در این صورت نیازی به شرط برخورد نیست و باید کد رو به صورت زیر تصحیح کنی : 

کد php:
if(audio_is_playing(snd) == false) {
 
audio_play_sound(snd1false);
 } 

دستور بالا هم اولا این snd صدایی هست ک شما تو منابع بازی تعریف کردی... 
دوما من الان نمیدونم این دو تابع در ورژنهای قدیمی کار می کنن یا نه...شما چک کنید دوباره اگ خطا داد این توابع کار نمی کنن و بعد از مطالعه رفرنس ورژن 8 بر میگردم...

ویرایش : 
سریع برگشتم  (: 

کد php:
if !sound_isplaying(snd){
 
  sound_play(snd);


از کد بالا استفاده کن ...میگه اگ snd در حال پخش نباشه پخشش کن...
در ضمن sound 2 و sound 3 چی ان ؟!

نکته برنامه نویسی : اسامی با معنا برای منابع ، متغیرها و کلا هرچیزی ک داری ازش تو بازی استفاده میکنی، به کار ببر...اینجور به خود مستند سازی کمک میکنی و بعدها اگ به بازی برگشتی بهتر میتونه یادت بیاره مثلا ابجکت 73 چیه...

ویرایش دوم : 
دقیقا بگو ک این sound2 و sound3 چی ان ...چون کد باید بر اساس ان دوتا نوشته بشن...
پاسخ
 سپاس شده توسط qwerty13 ، asi123
#9
(2/1/1398، 10:38 عصر)hisalam نوشته است: مهندس ورژن نرم افزار 8  ک ...از دستور من هم به صورت اشتباه استفاده کردی ...چون مستقیما تو رویداد برخورد نوشتی در این صورت نیازی به شرط برخورد نیست و باید کد رو به صورت زیر تصحیح کنی : 

کد php:
if(audio_is_playing(snd) == false) {
 
audio_play_sound(snd1false);
 } 

دستور بالا هم اولا این snd صدایی هست ک شما تو منابع بازی تعریف کردی... 
دوما من الان نمیدونم این دو تابع در ورژنهای قدیمی کار می کنن یا نه...شما چک کنید دوباره اگ خطا داد این توابع کار نمی کنن و بعد از مطالعه رفرنس ورژن 8 بر میگردم...

ویرایش : 
سریع برگشتم  (: 

کد php:
if !sound_isplaying(snd){
 
  sound_play(snd);


از کد بالا استفاده کن ...میگه اگ snd در حال پخش نباشه پخشش کن...
در ضمن sound 2 و sound 3 چی ان ؟!

نکته برنامه نویسی : اسامی با معنا برای منابع ، متغیرها و کلا هرچیزی ک داری ازش تو بازی استفاده میکنی، به کار ببر...اینجور به خود مستند سازی کمک میکنی و بعدها اگ به بازی برگشتی بهتر میتونه یادت بیاره مثلا ابجکت 73 چیه...

ویرایش دوم : 
دقیقا بگو ک این sound2 و sound3 چی ان ...چون کد باید بر اساس ان دوتا نوشته بشن...
sound2 صدای  بک گراند و اصلی بازی هست.
sound3 صدای برخورد با دشمن هست.

نکته دوم کاملا بجاست اما یه وقتایی عجله دارم میگم بعدا سرفرصت اسامی رو تغییر میدم.اتفاقا زیاد اینطور پیش امده بعد چند روز برگردم یادم میره چی به چیه eek

یه تشکر کنم  sunflower دمت گرم داداش ،کد درسته همینطور تو یه برنامه دیگه گذاشتم جواب داد.سپاس mwah

برای این تو عکس این دستور رو برای صدای بکگراند و برخورد رو گذاشتم 
 صدای بکگراند  رو بررسی کنه اگه صدای بکگراند بود ،صداهای دیگه هم باشن.
حالا یه ابجکت میکروفن گذاشتم تو بازی که با ماوس صدا رو بازیکن بتونه قطع یا وصل کنه. تو اون میکروفن هم فقط تونستم به صدای بکگراند دستور بدم.پس مجبور شدم اینجا تو برخورد بگم اگه صدای بکگراند بود تو هم صدا پخش کنٍ،نبود پخش نکن. الان عکس میکروفن رو میفرستم


فایل‌(های) پیوست شده
.jpg   1.jpg (اندازه: 38.27 KB / تعداد دفعات دریافت: 4)
.jpg   2.jpg (اندازه: 55.23 KB / تعداد دفعات دریافت: 3)
.jpg   3.jpg (اندازه: 109.23 KB / تعداد دفعات دریافت: 5)
.jpg   4.jpg (اندازه: 61.63 KB / تعداد دفعات دریافت: 4)
.jpg   5.jpg (اندازه: 56.11 KB / تعداد دفعات دریافت: 7)
پاسخ
#10
(2/1/1398، 10:38 عصر)hisalam نوشته است: مهندس ورژن نرم افزار 8  ک ...از دستور من هم به صورت اشتباه استفاده کردی ...چون مستقیما تو رویداد برخورد نوشتی در این صورت نیازی به شرط برخورد نیست و باید کد رو به صورت زیر تصحیح کنی : 

کد php:
if(audio_is_playing(snd) == false) {
 
audio_play_sound(snd1false);
 } 

دستور بالا هم اولا این snd صدایی هست ک شما تو منابع بازی تعریف کردی... 
دوما من الان نمیدونم این دو تابع در ورژنهای قدیمی کار می کنن یا نه...شما چک کنید دوباره اگ خطا داد این توابع کار نمی کنن و بعد از مطالعه رفرنس ورژن 8 بر میگردم...

ویرایش : 
سریع برگشتم  (: 

کد php:
if !sound_isplaying(snd){
 
  sound_play(snd);


از کد بالا استفاده کن ...میگه اگ snd در حال پخش نباشه پخشش کن...
در ضمن sound 2 و sound 3 چی ان ؟!

نکته برنامه نویسی : اسامی با معنا برای منابع ، متغیرها و کلا هرچیزی ک داری ازش تو بازی استفاده میکنی، به کار ببر...اینجور به خود مستند سازی کمک میکنی و بعدها اگ به بازی برگشتی بهتر میتونه یادت بیاره مثلا ابجکت 73 چیه...

ویرایش دوم : 
دقیقا بگو ک این sound2 و sound3 چی ان ...چون کد باید بر اساس ان دوتا نوشته بشن...

دمت گرم وقت میزاری بررسی میکنی و جواب میدی قربان شما استاد sunflower
پاسخ


موضوعات مرتبط با این موضوع...
موضوع نویسنده پاسخ بازدید آخرین ارسال
Smile (حل شد)مشکل در چک کردن برخورد ابجکت imaab 2 195 23/6/1397، 08:17 عصر
آخرین ارسال: MiladKaydi
  خطا هنگام ورود به گیم میکر استودیو seyedalisheykhi 13 268 10/6/1397، 02:28 صبح
آخرین ارسال: seyedalisheykhi
  برخورد و باز خورد در گیم میکر full-city 4 450 9/8/1396، 07:25 عصر
آخرین ارسال: full-city
  برخورد با ابجکت به شرط sina2000 9 525 21/6/1396، 03:41 عصر
آخرین ارسال: sina2000
  پرت شدن به عقب در زمان برخورد sina2000 5 545 16/4/1396، 01:15 صبح
آخرین ارسال: sina2000



کاربرانِ درحال بازدید از این موضوع: 1 مهمان