看板 GameDesign 關於我們 聯絡資訊
※ 引述《StubbornLin (Victor)》之銘言: : ※ 引述《StubbornLin (Victor)》之銘言: : : 判斷目前的速度v在經過了一段很短的時間後的下一刻 : : 這段時間是Δt,在經過Δt的路線上 : : 是否會穿過某樣物體,而這個Δt,就是上次更新和這次更新的時間差 : : 新的的座標位置 : : y = y + vy*Δt; : : 新的速度 : : vy = vy + g*Δt; : : 作法是,目前的座標,和下一刻的座標,兩點間的連線 : : 看是否會交某個物件 : : 如果不會穿過某樣物體,也就是沒有碰撞,就讓它繼續往下掉 : : 如果會穿過某樣物體,就要進行碰撞的運算 : : 這要看你的的球是否要給它彈性的特性,在這裡我們假設它沒有彈性 : : 也就是掉下去就不會再彈起來 : : 接著,你只要找出Δt內行進路線裡,最先與物體接觸的那點 : : 把球的位置設在那點上面,這樣應該就OK了 : 修正一下,應該要這樣說,碰撞到的那一點,的法向量,也就是 : 垂直於那個表面的方向,給與一個這顆球在這個法向量方向上面等同大小的反作用力 : 就可以抵消,簡單的來講,就是那個方向的速度歸0 : 這樣來做應該才比較正確,因為如果是x方向碰撞到,只有x方向的速度歸0 : 而y還會繼續往下掉 : ● 當撞到的一瞬間,速度在法線項量要抵消掉 : ↓ : ↑ 法線向量 : ----------------------------------- : 就算表面是斜的,一樣也是法向量速度歸0 這樣會有另一個問題 我先只講Y dy是Y的速度 主時間軸 { 計算dy; if(落地) dy=0; y+=dy; } 問題是當地面平坦時 落地之後即使按↑鍵去影響dy dy還是會被歸零 因為他在移動之前是接觸著地面的狀態 囧 這讓我不曉得怎麼作跳躍的功能 -- 無名網誌:http://www.wretch.cc/blog/et284vu065k3 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 61.228.125.108