微軟網站上的一些成熟的例子是一個很好的開始。
基於這個例子,我做了一些類似的事情。它是一個基於平鋪的方法,你有一個2維的「瓦片」列表(瓦片列表列表>>)爲瓦片設置一個靜態尺寸(比如說16x16像素),那麼這只是一個循環遍歷列表的問題繪製/執行碰撞檢測等等。只需要思考一下,如果我想到它,我可以稍後發佈一些代碼,如果你想,它在家中。
我通常接近運動物理的一個簡單方法就是使用3個Vector2對象,一個用於位置,一個用於速度,另一個用於加速。如果您熟悉簡單物理學,position = velocity * deltaTime,velocity = acceleration * deltaTime。當玩家跳躍,你只是增加了球員的加速度,然後在更新循環,計算位置:
// On Jump
player.acceleration += someConstant
// On Update
this.velocity += this.acceleration * deltaTime
this.position += this.velocity * deltaTime
同樣,我將在稍後發佈一些實際的代碼。
希望這有助於讓你開始
編輯:
下面是一些移動代碼
public override void Update(GameTime gameTime)
{
float deltaTime = ((float)gameTime.ElapsedGameTime.Milliseconds)/1000f;
currentState = Keyboard.GetState();
if (canMove)
{
// Input
if (currentState.IsKeyDown(Keys.Left))
Acceleration.X -= 1000;
if (currentState.IsKeyDown(Keys.Right))
Acceleration.X += 1000;
if (!airbourne && currentState.IsKeyDown(Keys.Space) && previousState.IsKeyUp(Keys.Space))
{
Acceleration.Y -= 25000;
airbourne = true;
}
// Friction in X to limit sliding
if (Velocity.X > 0)
{
Velocity.X -= X_FRICTION;
if (Velocity.X < 0)
Velocity.X = 0;
}
else
{
Velocity.X += X_FRICTION;
if (Velocity.X > 0)
Velocity.X = 0;
}
// Gravity
Acceleration.Y += 500;
}
Velocity += Acceleration * deltaTime;
if (Velocity.X > 0)
Velocity.X += speedMod;
else if (Velocity.X < 0)
Velocity.X -= speedMod;
// Move and check collisions in X
Position.X += Velocity.X * deltaTime;
if (game.checkCollisions(boundingBox()))
{
Position.X -= Velocity.X * deltaTime;
Velocity.X = 0;
}
// Move and check collisions in Y
Position.Y += Velocity.Y * deltaTime;
movingUp = Velocity.Y < 0;
if (game.checkCollisions(boundingBox()))
{
// If moving downwards, player not airbourne
if (Velocity.Y >= 0)
{
airbourne = false;
Position.Y = game.getCollisionDistance(boundingBox()) - 32;
}
else
{
Position.Y = game.getCollisionDistance(boundingBox()) + 32;
}
Velocity.Y = 0;
}
else
airbourne = true;
movingUp = false;
// Reset acceleration
Acceleration = Vector2.Zero;
previousState = currentState;
}
這個問題可能產生的http://gamedev.stackexchange.com/ –
爲什麼不更好的答案從簡單的事情開始?嘗試創建類似Monster Dash的遊戲:[Canabalt](http://www.adamatomic.com/canabalt/)。爲了使事情更容易,其iOS端口的源代碼已公開發布(https://github.com/ericjohnson/canabalt-ios)。 – Elideb
哇,謝謝!我不知道它的代碼是公開發布的!我想過Canabalt之類的東西,但需要代碼......我一定會檢查一下! – Itamar