Microsoft 웹 사이트의 platformer 예제를 시작하는 것이 좋습니다.
나는 그 예를 바탕으로 다소 비슷한 것을 만들었습니다. "타일"목록의 목록 (타일 목록)> 타일의 정적 크기 (예 : 16x16 픽셀)를 설정하면 목록을 반복하는 것입니다. 그리기/충돌 감지 등을 할 수 있습니다. 생각해 보면 생각합니다. 원한다면 나중에 코드를 게시 할 수 있습니다. 집에 있습니다.
일반적으로 움직이는 물리학에 접근하는 간단한 방법은 위치에 하나, 속도에 하나, 가속으로 하나씩 3 개의 Vector2 개체를 사용하는 것입니다. 간단한 물리학에 익숙하다면, 위치 = 속도 * deltaTime, 속도 = 가속 * 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