שימוש ב Ray Casting למציאת האובייקט הקרוב ביותר

דרך פשוטה למציאת האובייקט הקרוב ביותר לאובייקט אחר על ציר העומק (ציר Z) היא ע”י שימוש ב Ray casting שזאת מעין קרן אור דמיונית בלתי נראית שאנו יורים קדימה והיא מדווחת לנו מהוא האובייקט הקרוב ביותר בו היא פגעה לדוגמא בתכנית שלפנינו:

m1 is a dragon having pos=(3,-2,0)
m1 belongs to the enemies group
m2 is a sinbad having pos=(-3,0,0)
m2 belongs to the enemies group

s1 is a sight sprite

function rotate_picked_entity(m) = do
  m.turn left 30 in 1 second
end do

when key left is pressed do
  s1.move left 1 in 0.1 seconds
end do

when key right is pressed do
  s1.move right 1 in 0.1 seconds
end do

// perform ray casting here
when key space is pressed once do
  if enemies.ray check from (s1) then do
    run rotate_picked_entity(enemies.hit)
  end do 
end do

במקרה הזה הצגנו שני אובייקטים, אחד דרקון m1 השני סינבאד m2 ואובייקט נוסף של כוונת s1. ואז כאשר המשתמש לוחץ על מקש הריווח אנו בודקים באיזה אובייקט פגעה הקרן שיצאה מהכוונת. האובייקט שבו פגעה הקרן מסתובב 30 מעלות שמאלה.
נשים לב לפרט חשוב – שני האובייקטים, הדרקון והסינבאד שוייכו לקבוצה בשם enemies זאת מאחר שאת בדיקת ה ray casting אנו עושים מול קבוצה של אובייקטים ולא מול אובייקט בודד.
פקודת ה:

if enemies.ray check from (s1) then do

מבצעת את בדיקת הקרן ואם הבדיקה מצליחה אזי האובייקט הקרוב ביותר שנתפס בקרן נמצא במשתנה hit במקרה שלנו enemies.hit