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

امتیاز موضوع:
  • 0 رأی - میانگین امتیازات: 0
  • 1
  • 2
  • 3
  • 4
  • 5
سوال در مورد ساخت بازی تخته نرد
#1
سلام خدمت دوستان و اساتید گرامی. بنده تازه به جمع شما ملحق شدم و یه سوال ساده داشتم.(راستش هرچی انجمن رو زیر و رو کردم جوابشو پیدا نکردم).
یه آبجکت داریم به شکل مربع. دوتا اینستنس ازش توی روم ساختیم.
مکان مربع اول در نقطه (0و0) و مکان مربع دوم هم ایکسش به صورت رندوم و y=0
وقتی موس کلیک میشه x مریع اول برابر x موس میشه(مربع فقط افقی حرکت  میکنه و y  تغییری نمیکنه همون صفر)
حالا سوال من اینجاست. میخوام وقتی که موس کلیک شد قبلش اون نقطه چک بشه. اگه مربع دیگه ای در اون نقطه نبود که خب این مربع حرکت میکنه میره اونجا. ولی اگه مربع دیگه ای اونجا بود بره روی اون مربع سوار شه.مثل دو تا جعبه که روی هم گذاشتیم. باید چیکار کنم؟؟ممنون میشم اگه کمکم کنید. heart heart
پاسخ
#2
سلام
تو رویداد کلیک موس میتونی همچین چیزی بنویسی :
کد:
if collision_point(x , y ,yourObject ,0 , 1 ) {
instID.x = mouse_x;
instID.y -= sprite_height;
}

instID.x = mouse_x;
y = 0;
پاسخ
 سپاس شده توسط MiladKaydi ، qwerty13 ، sinaexample
#3
ممنون و متشکرم.
فقط مشکلی که الان هست اینه که اگه بیشتر از دوتا جعبه بود چی؟
مثلا دوتا جعبه روی هم هستن. و من میخوام این جعبه بره روی اون دوتا. یعنی اول چک بشه که چند تا جعبست بعد به همون مقدار y اضافه بشه.
پاسخ
#4
(10/1/1398، 07:54 عصر)sinaexample نوشته است: ...
اول چک بشه که چند تا جعبست بعد به همون مقدار y اضافه بشه.

سلام...
به راحتی !!! با استفاده از یک تابع بازگشتی : 
یه اسکریپت اضاف کن به نام scr_instance_counter  و کد زیر رو بریز توش ...


کد:
/// @function scr_instance_counter(my_x,my_y,my_height,my_object,start_value)

c = argument4;
if (place_meeting(argument0, argument1 - argument2, argument3)){
c ++ ;
scr_instance_counter(argument0,argument1 - argument2, argument2,argument3, c );
}
return c ;


بعد تو رویداد کلیک موس شی مربع ات (چون قاعدتا خالی نیست و به قول خودت یه مربعی اونجا هست ک میخوای تعداد مربعی ک روش هس رو بشماری) اینو اضاف کن 
کد:
global.c = scr_instance_counter(mouse_x,mouse_y,sprite_height,obj_square, 0) ;

global.c  متغیری هست ک خودت تعریف میکنی ک مقداری ک تابع برگردوند رو توش ذخیره کنی...
نکته : obj_square  اسم شی ای هست ک داری کلیک میکنی و میخوای ببینی چندتا از اون نمونه شی رو اون قرار داره...
نکته 2 : اون مقداری 0 هم ک بهش پاس می دی مقدار شروع شمارنده است ...اگ 0 بدی مثل من دقیقا تعداد اون نمونه هایی ک رو شی کلیک شده هست رو بهت میده اگ 1 بدی 1 دونه به شماره ها اضافه میکنه ( شی کلیک شده بعلاوه اونهایی ک رو همن ) کلا این عدد، عدد شروع کننده شمارنده است... مثلا اگ چندتا ستون شی داشته باشی و بخوای اشیای همه ستونها رو بشماری، فقط کافیه نتیجه خروجی همین تابع رو به عنوان مقدار شروع کننده بهش بدی...

ویرایش : 
یادم رف مقدار ORIGIN اسپرایت رو بزار رو BOTTOM_CENTRE...

توضیحات بیشتر درباره اسکریپت نویسی : 
مستندات یویو

ویرایش دوم : 
نکته سوم : این فقط تعداد رو میشماره واسه جابه جایی باید با کد های خودت (کدهایی دوستمون تو بالا) ترکیب کنی...

موفق باشی...
پاسخ
 سپاس شده توسط sinaexample
#5
(11/1/1398، 08:47 صبح)hisalam نوشته است:
(10/1/1398، 07:54 عصر)sinaexample نوشته است: ...
اول چک بشه که چند تا جعبست بعد به همون مقدار y اضافه بشه.

سلام...
به راحتی !!! با استفاده از یک تابع بازگشتی : 
یه اسکریپت اضاف کن به نام scr_instance_counter  و کد زیر رو بریز توش ...


کد:
/// @function scr_instance_counter(my_x,my_y,my_height,my_object,start_value)

c = argument4;
if (place_meeting(argument0, argument1 - argument2, argument3)){
c ++ ;
scr_instance_counter(argument0,argument1 - argument2, argument2,argument3, c );
}
return c ;


بعد تو رویداد کلیک موس شی مربع ات (چون قاعدتا خالی نیست و به قول خودت یه مربعی اونجا هست ک میخوای تعداد مربعی ک روش هس رو بشماری) اینو اضاف کن 
کد:
global.c = scr_instance_counter(mouse_x,mouse_y,sprite_height,obj_square, 0) ;

global.c  متغیری هست ک خودت تعریف میکنی ک مقداری ک تابع برگردوند رو توش ذخیره کنی...
نکته : obj_square  اسم شی ای هست ک داری کلیک میکنی و میخوای ببینی چندتا از اون نمونه شی رو اون قرار داره...
نکته 2 : اون مقداری 0 هم ک بهش پاس می دی مقدار شروع شمارنده است ...اگ 0 بدی مثل من دقیقا تعداد اون نمونه هایی ک رو شی کلیک شده هست رو بهت میده اگ 1 بدی 1 دونه به شماره ها اضافه میکنه ( شی کلیک شده بعلاوه اونهایی ک رو همن ) کلا این عدد، عدد شروع کننده شمارنده است... مثلا اگ چندتا ستون شی داشته باشی و بخوای اشیای همه ستونها رو بشماری، فقط کافیه نتیجه خروجی همین تابع رو به عنوان مقدار شروع کننده بهش بدی...

ویرایش : 
یادم رف مقدار ORIGIN اسپرایت رو بزار رو BOTTOM_CENTRE...

توضیحات بیشتر درباره اسکریپت نویسی : 
مستندات یویو

ویرایش دوم : 
نکته سوم : این فقط تعداد رو میشماره واسه جابه جایی باید با کد های خودت (کدهایی دوستمون تو بالا) ترکیب کنی...

موفق باشی...


خیلی خیلی ممنون و سسپاسگزارم.
کارهایی که فرموده بودید رو انجام دادم. 
ولی فکر میکنم یه مشکلی هست چون متاسفانه کار نمیکنه.(قاعدتا باید کارکنه).
پروژه رو در پیوست اضافه کردم. ممنون میشم اگه یه نگاه کوچیک بهش بندازید و اشکال کارمو بهم بگید. ممنون mwah


فایل‌(های) پیوست شده
.zip   testmove.zip (اندازه: 20.58 KB / تعداد دفعات دریافت: 3)
پاسخ
#6
درست شد
خیلی ممنون و سپاسگذارم.
کدهای global mouse pressed :
کد php:
global.zero=0;
global.
scr_instance_counter(mouse_x,mouse_y,64,obj_blue0) ;
obj_green.mouse_x;
obj_green.64*global.c
و اینهم کدهای اسکریپت scr_instance_counter :
کد php:
/// @function scr_instance_counter(my_x,my_y,my_height,my_object,start_value)
xx=argument0;
yy=argument1;
height=argument2;
obj=argument3;
argument4;
if (
place_meeting(xx , global.zero obj)){
    global.
zero +=height;
    
++ ;
scr_instance_counter(xx , global.zero height obj );

return 

پاسخ
 سپاس شده توسط hisalam
#7
نقل قول: خیلی خیلی ممنون و سسپاسگزارم.
کارهایی که فرموده بودید رو انجام دادم. 
ولی فکر میکنم یه مشکلی هست چون متاسفانه کار نمیکنه.(قاعدتا باید کارکنه).
پروژه رو در پیوست اضافه کردم. ممنون میشم اگه یه نگاه کوچیک بهش بندازید و اشکال کارمو بهم بگید. ممنون resim


سلام من پروژه ات رو داشتم چک میکردم... فقط چندا نکته داشت : 
نکته اول : محور مختصات رو تو مانیتور بالا چپ 0و0 هستش و y مثبت رو به پایینه و باید اسکریپت تغییر میکرد..با تغییر اون به جای منها از بعلاوه باید استفاده میشد ک من انجام دادم و شمارش درست بود فقط مونده بود قرار دادن زیر اونها !!! گفتم ک صفحه مختصات y مثبت رو به پایینه...
نکته دوم : برای اون حرکت هم ک رویداد  collision_point ک نوشتی دستورات انتهایی رو باید تو else مینوشتی (برو کد پست دوم رو ببین ک تو هم مستقیما تو پروژه ات استفاده کردی)... اما بازم یه مشکل داشت اونم اینکه رویداد در برخورد هم مقدار noone رو بر میگردوند !!!(یعنی برخوردی اتفاق نیفتاده) بنابراین صورت مساله رو میشد پاک کرد و به جای collision_point از  place_meeting  استفاده کنی ( به جای collision_point تو پست دوم منظورمه.. البته شرط else هم باز نباید فراموش میشد) ...

من داشتم مشکل collision رو بررسی میکردم چون واقعا برام جالب بود... شخصا یه جا نوشتم بعدا بررسیش کنم ببینم مشکل collision_point چی بود

نکته برنامه نویسی : سعی کن اسکریپتت رو جوری تغییر بدی که global_zero رو از اسکریپت حذف کنی تا اسکریپتت قابل حمل باشه یعنی وابسته به پروژه ات نباشه...

به هر حال خوشحالم ک مشکلت رفع شد...
به یادگیری منم کمک کرد...
موفق باشی...
پاسخ
 سپاس شده توسط sinaexample
#8
(11/1/1398، 06:23 عصر)hisalam نوشته است: موفق باشی...

بسیار ممنون و سپاسگزارم.
یه سری تغییرات روی پروژه اعمال کردم که جعبه ها به صورت دقیق روی هم قرار بگیرن. واسه اینکار grid  تعریف کردم ( که البته نیازی هم نبود. فقط برای دیدن بهتر).
و مختصات رو snap  کردم.
حالا جعبه ها به طور دقیق روی هم قرار میگیرن.(پروژه در پیوست ضمیمه شد)
فقط یه سوال دیگه از خدمتتون داشتم. اونم اینکه به عنوان مثال من میخوام روی هر جعبه ای که کلیک کردم همون جعبه انتخاب بشه(در صورتی که جعبه ای دیگه ای روش نباشه) و حرکت کنه.( الان فقط جعبه سبز حرکت میکنه).
باید چیکار کنم؟
فکر میکنم واسه انتخاب جعبه باید از کد  instance_position  استفاده کنم. درسته؟ 
و واسه اینکه ببینم جعبه دیگه ای روش هست یا نه دوباره با همون کد intance_meeting یه خونه بالاترشو چک کنم که اگه جعبه دیگه ای روش نبود حرکت کنه. درسته؟ یا روش بهتری هست؟


فایل‌(های) پیوست شده
.zip   testmove.zip (اندازه: 21.92 KB / تعداد دفعات دریافت: 2)
پاسخ
 سپاس شده توسط hisalam
#9
بااید با id کار کنی...
تو رویداد کلیک اشیا مشابه اینا رو باید بنویسی : 

کد:
clicked_instance = self.id;

clicked_instance .x = your_x ;
clicked_instance.y = your_y ;

اول ای دی شی رو میگری بعد مختصاتش رو تغییر میدی...
فقط یه راهنمایی کردم ...ادامه کار با خودت  yummi

کدت رو بنویس اشکال داشت بگو چی کار کردی ...البته بعید میدونم دچار اشکال شی...
پاسخ
 سپاس شده توسط sinaexample
#10
من یه سری تغییر دادم پروژه ات رو ... با همون روش خودت ک اشاره کردی ... 
در مورد اینکه اگ روی  اون چیزی نباشه بتونی  جا به جا کنی هم عمل رو شرطی کن بر اساس همون global.c یعنی اگ شمارنده 0 باشه و چیزی روش (زیرش !!!) نباشه بتونه تغییر بده و اگ باشه نتونه تغییر بده (البته من این تغییر رو ندادم چون برام قابل درک نبود منظورت کدوم اشکالی هست ک رو همن و کدوم رو میخوای جا ب جا کنی)... 
من نمیدونم دقیقا پروژه ات چیه اما به احتمال زیاد، پروژه ات رو احتمالا خیلی باید تغییر بدی ...اتفاقا من قبل از پرسیدنت تو پست قبلی حدس میزدم برای جابه جای چندتا ابجکت سوال کنی...
به هر حال من تغییر دادم میتونی ازش استفاده کنی ولی همونطور ک گفتم احتمال زیاد پروژه ات باید کلی تغییر کنه ... 
اول رو مربع سبز کلیک کن بعد هر جا خواستی کلیک کنی جا به جا میشه...البته اگ موضوع درگ کردنه اون خیلی ساده است ...پروژه ات رو اگ دوست داری کامل تعریف کن ....

http://s8.picofile.com/file/8356284018/n...e.yyz.html
پاسخ
 سپاس شده توسط sinaexample


موضوعات مرتبط با این موضوع...
موضوع نویسنده پاسخ بازدید آخرین ارسال
  سوال در مورد path در گیم میکر sinaexample 2 128 30/1/1398، 10:47 صبح
آخرین ارسال: sinaexample
  ساخت بازی open world در Game maker studieo Black wolf 11 920 9/11/1397، 07:59 عصر
آخرین ارسال: TNT
Big Grin ساخت بازی بلوتوثی devilerfan 6 773 4/10/1397، 06:25 صبح
آخرین ارسال: TNT
Exclamation سوال درمورد تغییر سایز پنجره ی بازی ali rahimy 1 336 9/8/1396، 06:01 عصر
آخرین ارسال: YASIN GIME
  سوال ساخت اسپرایت YASIN GIME 17 838 20/5/1396، 10:23 عصر
آخرین ارسال: mdc



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