Saya memiliki game "Gaya Breakeout" ini.
Saya punya meriam di tengah, blok di sekitar meriam dan bantalan di sekitar blok. Seperti inilah bentuk gimnya:
Saya telah berhasil mendapatkan collision per pixel dan bola saya " mencerminkan " pada kontak dengan blok dengan matematika berikut:
Ball.Direction = 2 * (Block.Direction - Ball.Direction) + 180;
Di mana garis biru adalah arah bola, dan garis hitam (garis dasar) adalah permukaan blok.
Arah adalah sudut yang dinyatakan dalam radian (yang dapat dikonversi ke derajat, tentu saja).
Bola digerakkan oleh:
// Event.ENTER_FRAME
x += Math.sin(Direction) * Velocity;
y -= Math.cos(Direction) * Velocity;
Sejauh ini bagus.
Masalah saya datang sekarang, dengan bantalan (3 blok gelap dan besar di sekitar blok berwarna kecil).
Saat mereka berbalik, sudut permukaan berubah.
Lebih dari itu, bola harus mengenai sisi juga, jadi, bagaimana saya bisa mengukur arah pukulan dan arah gerakan bola yang baru?
ps : Jika perlu, saya dapat menyediakan kode dan swf yang dapat dimainkan.
Edit
Ok, masalah dengan sudut diselesaikan dengan Vektor , tapi saya masih punya masalah dengan sisi dan tabrakan kembali.
Saya akan membuka pertanyaan lain untuk itu dan menautkannya di sini.