好了,所以這裏的問題是,我找到了一個不錯的工作2D相機從:XNA 4.0 2D相機使精靈生澀
http://www.david-amador.com/2009/10/xna-camera-2d-with-zoom-and-rotation/
所以,現在,我已經實現了它進入我的2D自上而下的射手遊戲它很好地工作。當我的相機位置與玩家位置相同時,它可以很好地工作;在一定程度上。現在,當我有相機位置=球員的位置,它來回顛簸這樣一點點:
http://www.youtube.com/watch?v=mh4Tx9xg324
正如你所看到的精靈去,然後又回到一點點。我將舉一個粗略的例子: 如果玩家的位置是(100,100),我會向右移動並轉到(120,100)。現在所有的數字都很好,它的可視化。可視化似乎是這樣的:
(100,100) - >(130,100) - >(120,100)
我不知道爲什麼它是這樣做的,它的錯誤我到如此地步,這正是我正在努力解決的問題。現在,當我將攝像頭集中在一個點(1000,1000)上時,玩家不會像這樣左右搖晃。所以這使得一切都直接指向Camera2D類。
無論如何,如果任何人都可以幫助它將不勝感激!
- 鮑比
**編輯** 移動代碼:
//Update Movement for user controlled sprites
//A bit rough around the edges at the moment...
public void UpdateMovement(Input input) {
//Get ready to point sprite at mouse location in relation to the center of the screen
MouseState mouse = Mouse.GetState();
mouseLoc = new Vector2(mouse.X, mouse.Y);
direction = new Vector2(512, 300) - mouseLoc;
angle = (float)((Math.Atan2(-direction.Y, -direction.X)));
m_Rotation = angle;
//End angle information
//reset the changed vector 2 back to zero
changed = Vector2.Zero;
//checkCollision(vector2)
//it gets the estimated new point and if it doesnt hit a wall
//it sets to the new point.
if (input.CurrentKeyboardState.IsKeyDown(Keys.A)) {
changed.X = -m_Speed;
if (!checkCollision(changed)) {
m_Position += changed;
}
}
if (input.CurrentKeyboardState.IsKeyDown(Keys.D)) {
changed.X = m_Speed;
if (!checkCollision(changed)) {
m_Position += changed;
}
}
if (input.CurrentKeyboardState.IsKeyDown(Keys.W)) {
changed.Y = -m_Speed;
if (!checkCollision(changed)) {
m_Position += changed;
}
}
if (input.CurrentKeyboardState.IsKeyDown(Keys.S)) {
changed.Y = m_Speed;
if (!checkCollision(changed)) {
m_Position += changed;
}
}
}
你能發佈你的移動代碼嗎? –
@NeilKnight像你問的那樣添加了移動代碼 – Mister