我正在使用SFML實現分離軸定理衝突,但遇到了我的頂點數組問題。它們正在轉換(包含頂點數組的類繼承了sf :: Transformable),但頂點座標沒有接收到轉換(即旋轉),因此如果對象未處於其原始方向,則碰撞不起作用。我試圖用這樣的獲取SFML中的絕對頂點座標?
length = sqrt(shape1.getShape()[i].position.x*shape1.getShape()[i].position.x + shape1.getShape()[i].position.y*shape1.getShape()[i].position.y);
newshape1[i].position.x = length*cos(shape1.getRotation()*(PI/180));
newshape1[i].position.y = length*sin(shape1.getRotation()*(PI/180));
兩個形狀的東西被測試計算頂點數組的SAT碰撞之前創建一個新的頂點數組。但是,這似乎並不奏效。我的函數返回發生了碰撞,即使沒有碰撞。我不確定數學是否存在錯誤,但是沒有將SFML轉換應用於對象,它完美地工作。那麼,有什麼我應該做的還是有另一種方法來收集VertexArray信息與轉換(幾乎只是旋轉)應用?
編輯:我在這裏找到了一些信息: http://sfml-dev.org/documentation/2.0/classsf_1_1Transform.php#details 但我在理解如何應用於我的VertexArrays時遇到了一些麻煩。看起來我應該在我的課程內部使用getTransform()
做某些事情,並將其與類VertexArray結合使用。
編輯:使用上述信息我嘗試使用這種方法,而不是在VertexArray SAT之前計算的各頂點:
newshape1[i].position = shape1.getTransform().transformPoint(shape1.getShape()[i].position);
計算點積時否定變換位置之後,它產生完全相同的結果作爲第一次嘗試。