גלה כיצד להוסיף אלמנט בלתי צפוי למשחק שלך.

בפיתוח משחקים, אלמנטים של אקראיות ובלתי צפויות יכולים לתרום רבות לחוויית המשחק הכוללת. אחת הדרכים המיוחדות להציג אלמנט כזה היא באמצעות אובייקטים נעים אקראיים, המוסיפים שכבה נוספת של אינטראקציה ואתגר.

אם אתה עובד עם Godot, אתה יכול להשיג את האפקט הזה באמצעות GDScript, שפת הסקריפט המקורית של Godot.

הגדרת משחק Godot שלך

לפני שמתחילים, הגדר סצנת משחק דו-ממדית בסיסית ב מנוע המשחק Godot. צור סצנה דו-ממדית חדשה והוסף א CharacterBody2D צומת עבור דמות השחקן. ה CharacterBody2D צומת הוא המרכיב העיקרי לייצוג דמויות שיכולות לנוע ולקיים אינטראקציה עם הסביבה שלהן.

הקוד המשמש במאמר זה זמין כאן מאגר GitHub והוא בחינם עבורך לשימוש תחת רישיון MIT.

הוסף שני צמתים צאצאים לדמות השחקן: א CollisionShape2D עם צורה מלבנית, וא ספרייט2D עבור הייצוג הגרפי של השחקן.

כדי להוסיף ניידות לדמות, אתה יכול להשתמש בקוד ה-GDScript הבא:

extends CharacterBody2D

var speed = 200

func _physics_process(delta):
var velocity = Vector2()

if Input.is_action_pressed('ui_right'):
velocity.x += 1

if Input.is_action_pressed('ui_left'):
velocity.x -= 1

instagram viewer

if Input.is_action_pressed('ui_down'):
velocity.y += 1

if Input.is_action_pressed('ui_up'):
velocity.y -= 1

velocity = velocity.normalized() * speed
move_and_collide(velocity * delta)

הגדר משתנה, מְהִירוּת, למהירות התנועה של השחקן שלך. ה _physics_process (דלתא) הפונקציה שולטת בתנועת הדמות בתגובה לתשומות השחקן. נרמל את המהירות והכיוון של הדמות כדי להבטיח תנועה עקבית ללא קשר לכיוון.

יצירת אובייקטים סטטיים עם StaticBody2D

לאחר מכן, צור אובייקטים שהשחקן שלך יכול לקיים איתם אינטראקציה. הדוגמה הבאה מדגימה את היצירה של אובייקט סטטי באמצעות ה- StaticBody2D צוֹמֶת:

extends StaticBody2D

func _ready():
var collision_shape = CollisionShape2D.new()
collision_shape.shape = RectangleShape2D.new()
add_child(collision_shape)

הוספת אלגוריתם תנועה אקראית עבור עצמים סטטיים

עכשיו כשהאובייקטים הסטטיים שלך מוכנים, הגיע הזמן להוסיף אקראיות למשחק שלך. כדי לעשות זאת, אתה יכול להשתמש באלגוריתם תנועה אקראי פשוט:

extends StaticBody2D

var speed = 100
var value = randf_range(-1, 1)
var direction = Vector2(value, value).normalized()

func _physics_process(delta):
position += direction * speed * delta

הגדר את מהירות האובייקט הסטטי שלך. כמו כן, צור כיוון Vector2 ואתחול אותו עם ערכים אקראיים בין -1 ל-1 עבור שני הצירים.

בתוך ה _physics_process (דלתא) פונקציה, להגדיל את מיקומו של האובייקט במכפלה של הכיוון שלו, מהירותו ודלתא הזמן, מה שגורם לו לנוע בכיוון במהירות הנתונה.

מיקומים ומסלולים אקראיים עבור עצמים סטטיים

אתה יכול להגביר את האקראיות ואת חוסר הניבוי על ידי שינוי המהירות והכיוון של האובייקטים, אלא גם מיקומם ומסלוליהם ההתחלתיים.

extends StaticBody2D

var speed = randf_range(50, 150)
var value = randf_range(-1, 1)
var direction = Vector2(value, value).normalized()

func _ready():
var val1 = randf_range(0, get_viewport().size.x)
var val2 = randf_range(0, get_viewport().size.y)
position = Vector2(val1, val2)

func _physics_process(delta):
position += direction * speed * delta

כאן המהירות היא ערך אקראי בין 50 ל-150. המיקום ההתחלתי של האובייקט נקבע באופן אקראי בתוך גודל נקודת התצוגה ב- _מוּכָן() הפונקציה ומיקום האובייקט מתעדכן ב- _physics_process (דלתא) לתפקד בדיוק כמו קודם.

התאמת מהירות, כיוון ואקראיות

אתה יכול לעצב משחק אינטראקטיבי ומרתק יותר על ידי מניפולציה של המהירות, הכיוון והאקראיות של תנועה עבור אובייקטים סטטיים. אתה יכול ליצור את הפקדים האלה באמצעות GDScript:

extends StaticBody2D

var speed = randf_range(50, 150)
var value = randf_range(-1, 1)
var direction = Vector2(value, value).normalized()
var speed_variation_rate = 0.5
var direction_variation_rate = 0.5

func _ready():
var val1 = randf_range(0, get_viewport().size.x)
var val2 = randf_range(0, get_viewport().size.y)
position = Vector2(val1, val2)

func _physics_process(delta):
randomize_speed_and_direction()
position += direction * speed * delta

func randomize_speed_and_direction():
if randf() < speed_variation_rate:
speed = randf_range(50, 150)

if randf() < direction_variation_rate:
direction = Vector2(value, value).normalized()

תכונות נוספות עבור החפצים הנעים באקראי שלך

בעוד שהתנועה האקראית הבסיסית מוסיפה דינמיקה בלתי צפויה למשחק שלך, יש אינספור תכונות נוספות שאתה יכול להוסיף כדי לשפר עוד יותר את המשחק שלך. כמה דוגמאות כוללות:

מבחר צבעים

בדומה לאופן שבו ביצעת אקראית את המהירות והכיוון של האובייקטים, אתה יכול גם לעשות אקראי את הצבעים שלהם. זה יכול להוסיף היבט תוסס ומושך יותר למשחק שלך. אתה יכול לעשות זאת על ידי שינוי ה- לְוַסֵת רכושו של הספרייט.

sprite.modulate = Color(randf(), randf(), randf())

שינוי גודל

שינוי אקראי של גודל האובייקטים מוסיף עוד רמת קושי וחוסר חיזוי. שחקנים יצטרכו להסתגל כל הזמן לגדלים המשתנים של אובייקטים. אתה יכול לשנות את הגודל של אובייקט על ידי התאמתו סוּלָם תכונה:

sprite.scale = Vector2(randf_range(0.5, 2.0), randf_range(0.5, 2.0))

השרצת אובייקטים

במקום לקבל מספר קבוע של אובייקטים נעים אקראיים, אתה יכול ליישם מערכת שמולידה אובייקטים חדשים במרווחי זמן קבועים או בתנאים מסוימים. זה יכול להוסיף שכבת קושי חדשה מכיוון שהשחקן יצטרך להתאים את האסטרטגיה שלו ככל שיופיעו יותר חפצים על המסך.

תוחלת חיים של אובייקט

בנוסף להוליד אובייקטים חדשים, אתה יכול גם לגרום לאובייקטים להרוס את עצמם אוטומטית לאחר פרק זמן מסוים. זה יכול למנוע מהמסך להיות עמוס מדי ולשמור על רעננות המשחק.

אינטראקציות

חשבו על הוספת אינטראקציות ספציפיות בין השחקן לבין האובייקטים הנעים. לדוגמה, התנגשות עם עצמים מסוימים עלולה להגדיל את הניקוד של השחקן, לשנות את מהירות השחקן, או אפילו לשנות את סביבת המשחק. אתה יכול גם לאפשר לשחקן לקפוץ כאשר עומדים על במה.

שיטות עבודה מומלצות להוספת אובייקטים נעים באקראי

בעת הוספת אובייקטים נעים אקראיים, חשוב לשקול כמה שיטות עבודה מומלצות כדי להבטיח משחק מאוזן היטב ומרתק:

שיקולי ביצועים

למרות שזה מפתה להוסיף כמה שיותר אובייקטים, זכרו שכל אובייקט מגביר את העומס החישובי על מנוע המשחק. בדוק תמיד את המשחק שלך על חומרת היעד כדי להבטיח שהביצועים לא יושפעו לרעה.

איזון בין אקראיות למשחקיות

בעוד שאובייקטים אקראיים יכולים להוסיף אי-חיזוי מהנה, יותר מדי אקראיות עלולה להוביל לתסכול. הקפד לבצע בדיקות מקיפות כדי להגיע לאיזון הנכון בין אתגר להנאה.

התנגשויות ותגובה

ודא שהמשחק מטפל בהתנגשויות בין השחקן לאובייקטים בצורה מתאימה. עצמים נעים אקראיים עלולים לגרום לתרחישי התנגשות בלתי צפויים, אז תכנן אותם ובדוק היטב.

בהירות חזותית

אובייקטים נעים אקראיים צריכים לבלוט מהרקע ומאלמנטים אחרים שאינם אינטראקטיביים. זה עוזר לשחקנים להבין במהירות את מצב המשחק ולתכנן את פעולותיהם בהתאם. אתה יכול גם להוסיף אפקטים קוליים לחפצים שלך כדי להבליט אותם.

ההשפעה של חפצים נעים אקראיים על משחק הגודו שלך

חפצים זזים אקראיים יכולים לתרום באופן משמעותי להפיכת משחק הגודו למושך יותר. הם מציגים אלמנט של אי-חיזוי ששומר על שחקנים על בהונותיהם. בכל פעם ששחקן מתחיל את המשחק, הוא יקבל את פניו עם תצורה שונה של אובייקטים, מה שיוסיף ליכולת המשחק החוזרת שלו.

יתרה מכך, מכיוון ששחקנים אינם יכולים לחזות את הנתיב של חפצים נעים, עליהם להישאר ממוקדים ומגיבים כדי לנווט בסביבת המשחק