رفتن به محتوا

ایجاد کنترل‌های دکمه چپ/راست روان برای موبایل

💡 Having trouble with Scratch block assembly? Don’t know how to implement code logic? 🚀 Get Help Now

MA

MobileDev_Alex

Posted on August 1, 2024 • Intermediate

📱 نیاز به کمک برای کنترل‌های موبایل روان

من در حال ساخت یک بازی پلتفرمر/داستانی هستم و نیاز به اضافه کردن پشتیبانی موبایل دارم چون روی موبایل توسعه می‌دهم. بازی هم کنترل‌های کیبورد و هم موبایل خواهد داشت. من قبلاً می‌دانم چگونه کنترل‌های کیبورد بسازم، اما در ایجاد دکمه‌های چپ/راست روان که احساس تکه‌تکه نداشته باشند مشکل دارم.

مشکلات اصلی که با آن‌ها روبرو هستم:

  • فشار دادن دکمه‌ها کند و غیرقابل پاسخ به نظر می‌رسد
  • حرکت به جای روان بودن، تکه‌تکه است
  • نیاز به بازخورد بصری و حرکت روان شخصیت دارم

هر کمکی برای ایجاد کنترل‌های موبایل با احساس حرفه‌ای فوق‌العاده خواهد بود! 🙏

TC

TouchControl_Expert

۱ ساعت بعد پاسخ داد • ⭐ بهترین پاسخ

سوال عالی @MobileDev_Alex! ایجاد کنترل‌های موبایل روان برای تجربه کاربری خوب بسیار مهم است. در اینجا راه‌حل جامعی است که تمام نگرانی‌های شما را برطرف می‌کند:

🎮 مرحله ۱: ایجاد اسپرایت‌های دکمه

ابتدا دو اسپرایت دکمه (دکمه چپ و دکمه راست) با دو لباس هر کدام ایجاد کنید:

  • لباس ۱: حالت عادی (فشرده نشده)
  • لباس ۲: حالت فشرده شده (تیره‌تر/برجسته)

📱 مرحله ۲: بازخورد بصری دکمه

برای هر اسپرایت دکمه، این کد را برای بازخورد بصری اضافه کنید:

    when flag clicked
forever
if <<touching [mouse-pointer v]?> and <mouse down?>> then
switch costume to [pressed v]
broadcast [button pressed v] // or [left pressed v] / [right pressed v]
else
switch costume to [normal v]
broadcast [button released v] // or [left released v] / [right released v]
end
end
  

🏃 مرحله ۳: حرکت روان شخصیت

برای شخصیت بازیکن خود، این سیستم حرکت روان را پیاده‌سازی کنید:

    when flag clicked
set [movement speed v] to [0]
set [max speed v] to [8]
set [acceleration v] to [1]
set [friction v] to [0.8]

forever
// Handle input
if <<key [left arrow v] pressed?> or <[left pressed v] = [true]>> then
change [movement speed v] by (0 - [acceleration v])
end
if <<key [right arrow v] pressed?> or <[right pressed v] = [true]>> then
change [movement speed v] by [acceleration v]
end

// Apply friction when no input
if <<<not <key [left arrow v] pressed?>> and <not <key [right arrow v] pressed?>>> and <<[left pressed v] = [false]> and <[right pressed v] = [false]>>> then
set [movement speed v] to ((movement speed) * [friction v])
end

// Limit speed
if <(movement speed) > [max speed v]> then
set [movement speed v] to [max speed v]
end
if <(movement speed) < (0 - [max speed v])> then
set [movement speed v] to (0 - [max speed v])
end

// Apply movement
change x by [movement speed v]
end
  

🔄 مرحله ۴: مدیریت وضعیت دکمه‌ها

متغیرهایی برای ردیابی وضعیت دکمه‌ها ایجاد کنید:

    when flag clicked
set [left pressed v] to [false]
set [right pressed v] to [false]

when I receive [left button pressed v]
set [left pressed v] to [true]

when I receive [left button released v]
set [left pressed v] to [false]

when I receive [right button pressed v]
set [right pressed v] to [true]

when I receive [right button released v]
set [right pressed v] to [false]
  

✨ مرحله ۵: حرکت روان پیشرفته

برای حرکت روان‌تر با شتاب و کاهش سرعت:

    // Advanced movement with ramp-up and ramp-down
when flag clicked
set [speed ramp v] to [0]
set [is moving v] to [false]

forever
set [is moving v] to [false]

if <<key [left arrow v] pressed?> or <[left pressed v] = [true]>> then
set [is moving v] to [true]
point in direction [-90]
if <[speed ramp v] < [8]> then
change [speed ramp v] by [0.5]
end
end

if <<key [right arrow v] pressed?> or <[right pressed v] = [true]>> then
set [is moving v] to [true]
point in direction [90]
if <[speed ramp v] < [8]> then
change [speed ramp v] by [0.5]
end
end

if <[is moving v] = [true]> then
move [speed ramp v] steps
else
// Decelerate when not moving
if <[speed ramp v] > [0]> then
change [speed ramp v] by [-0.3]
move [speed ramp v] steps
else
set [speed ramp v] to [0]
end
end
end
  

این حس حرفه‌ای با شتاب و کاهش سرعت روان ایجاد می‌کند! 🚀

MA

MobileDev_Alex

Replied 2 hours later

@TouchControl_Expert این فوق‌العاده است! خیلی ممنون! 🎉

حرکت الان خیلی روان‌تر احساس می‌شود. یک سوال - چطور می‌توانم جلوه‌های بصری اضافه کنم وقتی شخصیت حرکت می‌کند، مثل ذرات غبار یا تغییرات انیمیشن؟

VE

VisualEffects_Pro

Replied 1 hour later

@MobileDev_Alex سوال عالی! در اینجا نحوه اضافه کردن جلوه‌های بصری آمده است:

    // Add this to your player sprite for animation
when flag clicked
forever
if <[is moving v] = [true]> then
if <[speed ramp v] > [2]> then
switch costume to [running v]
create clone of [dust particle v]
else
switch costume to [walking v]
end
else
switch costume to [idle v]
end
end

// For dust particles (separate sprite)
when I start as a clone
go to [player v]
change y by [-20]
set [ghost v] effect to [50]
repeat [10]
change y by [2]
change [ghost v] effect by [5]
end
delete this clone
  

این انیمیشن دویدن و جلوه‌های غبار را برای جلوه بیشتر اضافه می‌کند! ✨

VB

Vibelf_Community

Pinned Message • Moderator

🚀 می‌خواهید توسعه بازی موبایل را تسلط پیدا کنید؟

بحث عالی در مورد کنترل‌های موبایل! برای کسانی که به دنبال ایجاد بازی‌های موبایل پیشرفته‌تر هستند، جامعه ما می‌تواند به شما در پیاده‌سازی کمک کند:

  • 📱 کنترل‌های حرکات چندلمسی
  • 🎮 سیستم‌های جوی‌استیک مجازی
  • ⚡ بهینه‌سازی عملکرد برای موبایل
  • 🎨 طراحی رابط کاربری پاسخگو

📚 موضوعات مرتبط

آماده ایجاد بازی‌های موبایل حرفه‌ای هستید؟ راهنمایی متخصص از مربیان ما در اپلیکیشن Vibelf دریافت کنید!