habe das problem eigenständig lösen können^^
Allerdings in den anderen Dateien^^
hatte nur eine Denkblockade.
Hier meine Lösung(Die Änderungen sind Rot markiert.):
Animation.cs
Code:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.Xna.Framework.Graphics;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Input;
namespace WindowsGame1
{
class Animation
{
Texture2D texture;
Rectangle rectangle;
public Vector2 position;
Vector2 origin;
Vector2 velocity;
int currentFrame;
int frameHeight;
int frameWidth;
float timer;
float interval=5;
bool hasJumped;
public Animation( Texture2D newTexture, Vector2 newPosition, int newFrameHeight, int newFrameWidth)
{
texture=newTexture;
position=newPosition;
frameHeight=newFrameHeight;
frameWidth=newFrameWidth;
hasJumped = true;
}
public void Update(GameTime gameTime)
{
rectangle = new Rectangle(currentFrame * frameWidth, 0, frameWidth, frameHeight);
origin = new Vector2(rectangle.Width / 2, rectangle.Height / 2);
position += velocity;
if (Keyboard.GetState().IsKeyDown(Keys.Right) && position.X<=650)
{
AnimateRight(gameTime);
velocity.X = 3;
}
else if (Keyboard.GetState().IsKeyDown(Keys.Left) && position.X>20)
{
AnimateLeft(gameTime);
velocity.X = -3;
}
else
{
velocity.X = 0f;
}
if (Keyboard.GetState().IsKeyDown(Keys.Space) && hasJumped == false)
{
position.Y -= 15f; //sprunggeschwindigkeit
velocity.Y = -10f; //sprunghöhe
hasJumped = true;
}
if (hasJumped == true)
{
float i = 1;
velocity.Y += 0.5f * i; //fallgeschwindigkeit
}
if (position.Y + texture.Height >= 450)
hasJumped = false;
if (hasJumped == false) velocity.Y = 0f;
}
public void AnimateRight(GameTime gameTime)
{
timer += (float)gameTime.ElapsedGameTime.TotalMilliseconds / 2;
if (timer>interval)
{
currentFrame++;
timer = 0;
if (currentFrame>3)
{
currentFrame = 0;
}
}
}
public void AnimateLeft(GameTime gameTime)
{
timer += (float)gameTime.ElapsedGameTime.TotalMilliseconds / 2;
if (timer > interval)
{
currentFrame++;
timer = 0;
if (currentFrame > 7 || currentFrame < 4)
{
currentFrame = 4;
}
}
}
public void Draw(SpriteBatch spriteBatch)
{
spriteBatch.Draw(texture, position, rectangle, Color.White, 0f, origin, 1.0f, SpriteEffects.None,0);
}
}
}
Game1.cs
Code:
using System;
using System.Collections.Generic;
using System.Linq;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Audio;
using Microsoft.Xna.Framework.Content;
using Microsoft.Xna.Framework.GamerServices;
using Microsoft.Xna.Framework.Graphics;
using Microsoft.Xna.Framework.Input;
using Microsoft.Xna.Framework.Media;
namespace WindowsGame1
{
/// <summary>
/// This is the main type for your game
/// </summary>
public class Game1 : Microsoft.Xna.Framework.Game
{
GraphicsDeviceManager graphics;
SpriteBatch spriteBatch;
Scrolling scrolling1; //Background
Scrolling scrolling2; //Background
Animation player; //Character+Animation
public Game1()
{
graphics = new GraphicsDeviceManager(this);
Content.RootDirectory = "Content";
}
/// <summary>
/// Allows the game to perform any initialization it needs to before starting to run.
/// This is where it can query for any required services and load any non-graphic
/// related content. Calling base.Initialize will enumerate through any components
/// and initialize them as well.
/// </summary>
protected override void Initialize()
{
// TODO: Add your initialization logic here
base.Initialize();
player = new Animation(Content.Load<Texture2D>("Frank"), new Vector2(100, 100), 47, 44);
}
/// <summary>
/// LoadContent will be called once per game and is the place to load
/// all of your content.
/// </summary>
protected override void LoadContent()
{
// Create a new SpriteBatch, which can be used to draw textures.
spriteBatch = new SpriteBatch(GraphicsDevice);
// TODO: use this.Content to load your game content here
// player = new Animation(Content.Load<Texture2D>("Frank"), new Vector2(50, 50));
scrolling1 = new Scrolling(Content.Load<Texture2D>("Backgrounds/Background1"), new Rectangle(0, 0, 800, 500));
scrolling2 = new Scrolling(Content.Load<Texture2D>("Backgrounds/Background2"), new Rectangle(800, 0, 800, 500));
}
/// <summary>
/// UnloadContent will be called once per game and is the place to unload
/// all content.
/// </summary>
protected override void UnloadContent()
{
// TODO: Unload any non ContentManager content here
}
/// <summary>
/// Allows the game to run logic such as updating the world,
/// checking for collisions, gathering input, and playing audio.
/// </summary>
/// <param name="gameTime">Provides a snapshot of timing values.</param>
protected override void Update(GameTime gameTime)
{
// Allows the game to exit
if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed)
this.Exit();
// TODO: Add your update logic here
if (player.position.X > 650 && Keyboard.GetState().IsKeyDown(Keys.Right))
{
if (scrolling2.rectangle.X + scrolling2.texture.Width <= 0)
scrolling2.rectangle.X = scrolling1.rectangle.X + scrolling1.texture.Width;
if (scrolling1.rectangle.X + scrolling1.texture.Width <= 0)
scrolling1.rectangle.X = scrolling2.rectangle.X + scrolling2.texture.Width;
scrolling1.Update();
scrolling2.Update();
}
player.Update(gameTime);
base.Update(gameTime);
}
/// <summary>
/// This is called when the game should draw itself.
/// </summary>
/// <param name="gameTime">Provides a snapshot of timing values.</param>
protected override void Draw(GameTime gameTime)
{
GraphicsDevice.Clear(Color.CornflowerBlue);
// TODO: Add your drawing code here
spriteBatch.Begin();
scrolling1.Draw(spriteBatch);
scrolling2.Draw(spriteBatch);
player.Draw(spriteBatch);
spriteBatch.End();
base.Draw(gameTime);
}
}
}
Die Änderungen sind Rot markiert.
Mein nächstes Problem wird die Map sein^^
Ich habe Überhaupt keine Ahnung wie ich das machen soll^^
Ich habe Irgendwas gelesen von Arrays in Arrays O.o
Kann mir da evt. jmd weiterhelfen=?
MfG ipulf2