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

آموزش ساخت بازی با C# آموزش پروژه محور یونیتی Unity آموزش ساخت بازی حدس تصویر
آموزش مدل سازی در Maya آموزش یونیتی Unity- ساخت منو آموزش گنجینه برنامه نویسی اندروید
آموزش مدل سازی با 3Ds Max آموزش متحرک سازی با Unity آموزش گرافیک کامپیوتری با OpenGL
آموزش متحرک سازی در 3Ds Max مجموعه آموزش های ساخت بازی آموزش ساخت بازی در ویژوال بیسیک
● آموزش های رایگان ● تبلیغات دیجیتال هوشمند ● استخدام در فرادرس

امتیاز موضوع:
  • 1 رأی - میانگین امتیازات: 5
  • 1
  • 2
  • 3
  • 4
  • 5
حرکت شی از یک نقطه به نقطه دیگر در طول یک بازه زمانی مشخص
#11
با سلام

دوستان عزیز

راه حل پیدا شد.

فایل اجرایی و سورس آن را در ضمیمه قرار دادم.

========================================

راه حل:

ما متوجه شدیم که FPS تعداد فریم در ثانیه هست.

همچنین می دانیم که اکشن

move_toward_point(x, y , sp)

یک شی را از یک نقطه به نقطه دیگر با سرعت معین حرکت می دهد.

اما توضیح پارامتر سوم یعنی sp در لینک زیر:
https://docs.yoyogames.com/source/dadios...point.html
این
The speed to move at in pixels per second.
می باشد.
یعنی حرکت n پیکسل در هر ثانیه.

همچنین

ما می دانیم که رویداد step‌ در هر ثانیه به تعدادی که در ثابت room_speed هست اجرا می شود.

البته ما نمی خواهیم از room_speed‌ استفاده کنیم و آنرا هم به هیچ وجه تغییر نمی دهیم.

پس می گوییم که رویداد step در هر ثانیه به تعدادی که در fps‌ هست فراخوانی می شود.

معمولا مقدارش 30 هست. پس رویداد مذکور در هر ثانیه 30 بار فراخوانی می شود.

اما بعد ...

ما می خواهیم یک شی فرضا در مدت 20 ثانیه از یک نقطه حرکت و به نقطه دیگر برسد و فاصله این دو نقطه 100 پیکسل می باشد.

ما یکصد را بر ده تقسیم می کنیم و متوجه می شویم که در هر ثانیه باید 5 پیکسل حرکت کند.

حالا ما speed شی حرکت کننده را تا زمانی که به مقصد برسد به صورت زیر مقدار می دهیم.

سرعت = مسافت بین دو نقطه / زمان مورد نظر / FPS
یعنی

speed = 100 / 20 / fps

حالا کدش به شکل زیر هست:
دو تا آبجکت در طرفین صفحه قرار می دهیم.


object0 : Create Event
=================
globalvar IsStartMoved,
my_second_time,
RemainingDistance,
Distance,
pixel_per_step;

global.IsStartMoved = false;
global.Distance = 0;
global.my_second_time = 5;// پنج ثانیه

object0: Event press <space>
======================
if(!global.IsStartMoved)
{
global.IsStartMoved = true;
global.Distance = point_distance(object0.x, object0.y, object1.x, object1.y);
global.RemainingDistance = global.Distance;
global.pixel_per_step = global.Distance / global.my_second_time / fps;
move_towards_point(object1.x, object1.y, global.pixel_per_step);
}
else
{
object0.x = 32;
object0.y = 288;
global.Distance = 0;
global.RemainingDistance = 0;
global.IsStartMoved = false;
}

object0: Event Step
=====================
if(global.IsStartMoved)
{
global.pixel_per_step = global.Distance / global.my_second_time / fps;

object0.speed = global.pixel_per_step;

if(global.RemainingDistance <= 0)
{
object0.speed = 0;

object0.x = 32;
object0.y = 288;
global.Distance = 0;
global.RemainingDistance = 0;
global.IsStartMoved = false;
}
}
else
{
}

==============================================

چند روز طول کشید تا به این نتیجه رسیدم.
البته باید بگم که یکی از علت هاش تازه وارد بودن من در گیم میکر هست.

===============================================

امیدوارم که به درد دوستان بخورد.

==========================================

من ضمیمه را با
Game maker 8.1
طراحی کردم.

نحوه کار:

با زدن دکمه space مربع سیاه رنگ از سمت چپ صفحه در طول زمان my_second_time به سمت مربع سفید رنگ حرکت می کند.
دو تا دکمه بالا/پایین سبز رنگ وجود دارد که می توانیم زمان دلخواه به ثانیه را با آن تنظیم کنیم.
البته این کار باید قبل از فشردن دکمه space‌ صورت بگیرد.
همچنین
تا زمانی که fps در صفحه مقدارش صفر هست دکمه space‌ را فشار ندهید.

موفق و پیروز باشید.
==========================================
اگر مشکلی پیش آمد پیام بگذارید.

با تشکر


فایل‌(های) پیوست شده
.zip   MovementPointToPointByDuringTime.zip (اندازه: 1.84 MB / تعداد دفعات دریافت: 12)
پاسخ
 سپاس شده توسط fahimi
#12
با سلام

دوستان عزیز

اگر بخواهم این کدی را که در پست قبلی نوشتم به یک اکشن تبدیل کنم

باید چه کاری انجام بدهم؟

چه طوری آن را به یک اکستنشن تبدیل کنم؟

با تشکر
پاسخ
#13
(6/8/1395، 11:56 عصر)behzadkhan نوشته است: با سلام

دوستان عزیز

اگر بخواهم این کدی را که در پست قبلی نوشتم به یک اکشن تبدیل کنم

باید چه کاری انجام بدهم؟

چه طوری آن را به یک اکستنشن تبدیل کنم؟

با تشکر

مرحله یک: گیم میکر فارسی رو نصب میکنی

مرحله دو: در محل نصب گیم میکر فارسی پوشه softwares,یه چند تا برنامه به درد بخور هست.که اونم جزو اوناست.

سوال دیگه؟
ُُُTNT گفته که:
روش پرسیدن سوال:
- به سوالتون عکس اضافه کنید.
- سعی کنید مثال بزنید.
مثلا نگید:
میخوام کاری کنم با فشار دادن دکمه آبجکتم یک آبجکت دیگه تولید کنه!
بجاش بگید:
میخوام کاری کنم وقتی بازیکن دکمه ی اسپیس رو زد کاراکترم تیر بزنه.
پاسخ


موضوعات مرتبط با این موضوع...
موضوع نویسنده پاسخ بازدید آخرین ارسال
  رد نشدن آبجکت از آبجکت دیگر amirmahdipanahi 3 106 18/4/1397، 12:45 صبح
آخرین ارسال: Alireza_kasir
  سوال حرکت اسپرایت دشمن YASIN GIME 7 302 28/5/1396، 12:54 عصر
آخرین ارسال: YASIN GIME
Exclamation نمایش خطا نا مشخص هنگام خروجی اندروید در گیم میکر wowxpria 6 789 8/11/1395، 12:26 عصر
آخرین ارسال: wowxpria
  حرکت ابجکت با موس mahdi1100 3 1,083 23/11/1394، 05:06 عصر
آخرین ارسال: spark
  کمک در مورد استفاده از افکت های حرکت روم در گیم میکر استودیو alinux 5 1,302 10/4/1394، 12:07 عصر
آخرین ارسال: alinux



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