ich poste ma den Code
Achso das mit der ArrayList klappt zwar aber ich weiß nicht wie ich sage das die collision nur innerhalb der Liste passieren soll
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;
using System.Collections;
namespace WindowsGame2
{
/// <summary>
/// Dies ist der Haupttyp für Ihr Spiel
/// </summary>
public class Game1 : Microsoft.Xna.Framework.Game
{
GraphicsDeviceManager graphics;
SpriteBatch spriteBatch;
Texture2D bg, wk, mk;
bool collision = true;
ArrayList MyTextureList= new ArrayList();
public int player_X = 400;
public int player_Y = 400;
int player_speed = 4;
int player_XM = 800;
int player_YM = 400;
int playerm_speed = 4;
public Game1()
{
graphics = new GraphicsDeviceManager(this);
Content.RootDirectory = "Content";
}
/// <summary>
/// Ermöglicht dem Spiel die Durchführung einer Initialisierung, die es benötigt, bevor es ausgeführt werden kann.
/// Dort kann es erforderliche Dienste abfragen und nicht mit der Grafik
/// verbundenen Content laden. Bei Aufruf von base.Initialize werden alle Komponenten aufgezählt
/// sowie initialisiert.
/// </summary>
protected override void Initialize()
{
// TODO: Fügen Sie Ihre Initialisierungslogik hier hinzu
graphics.PreferredBackBufferHeight = 720;
graphics.PreferredBackBufferWidth = 1280;
graphics.ApplyChanges();
this.Window.Title = "Fang den Wenzel";
base.Initialize();
}
/// <summary>
/// LoadContent wird einmal pro Spiel aufgerufen und ist der Platz, wo
/// Ihr gesamter Content geladen wird.
/// </summary>
protected override void LoadContent()
{
// Erstellen Sie einen neuen SpriteBatch, der zum Zeichnen von Texturen verwendet werden kann.
spriteBatch = new SpriteBatch(GraphicsDevice);
bg = Content.Load<Texture2D>("bg");
wk = Content.Load<Texture2D>("wk");
mk = Content.Load<Texture2D>("mk");
// TODO: Verwenden Sie this.Content, um Ihren Spiel-Content hier zu laden
}
/// <summary>
/// UnloadContent wird einmal pro Spiel aufgerufen und ist der Ort, wo
/// Ihr gesamter Content entladen wird.
/// </summary>
protected override void UnloadContent()
{
// TODO: Entladen Sie jeglichen Nicht-ContentManager-Content hier
}
/// <summary>
/// Ermöglicht dem Spiel die Ausführung der Logik, wie zum Beispiel Aktualisierung der Welt,
/// Überprüfung auf Kollisionen, Erfassung von Eingaben und Abspielen von Ton.
/// </summary>
/// <param name="gameTime">Bietet einen Schnappschuss der Timing-Werte.</param>
protected override void Update(GameTime gameTime)
{
// Ermöglicht ein Beenden des Spiels
if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed)
this.Exit();
// Player Tastatur
KeyboardState ks = Keyboard.GetState();
if (ks.IsKeyDown(Keys.W))
{
player_Y-= player_speed;
}
if (ks.IsKeyDown(Keys.S))
{
player_Y+= player_speed;
}
if (ks.IsKeyDown(Keys.D))
{
player_X+= player_speed;
}
if (ks.IsKeyDown(Keys.A))
{
player_X-= player_speed;
}
if (ks.IsKeyDown(Keys.E))
{
player_speed += 1;
}
if (ks.IsKeyDown(Keys.R))
{
player_speed -= 1;
}
//Player2 Tastatur
if (ks.IsKeyDown(Keys.Up))
{
player_YM-= player_speed;
}
if (ks.IsKeyDown(Keys.Down))
{
player_YM+= player_speed;
}
if (ks.IsKeyDown(Keys.Right))
{
player_XM+= player_speed;
}
if (ks.IsKeyDown(Keys.Left))
{
player_XM -= player_speed;
}
if (ks.IsKeyDown(Keys.RightControl))
{
playerm_speed += 1;
}
if (ks.IsKeyDown(Keys.RightAlt))
{
playerm_speed -= 1;
}
// TODO: Fügen Sie Ihre Aktualisierungslogik hier hinzu
base.Update(gameTime);
}
/// <summary>
/// Dies wird aufgerufen, wenn das Spiel selbst zeichnen soll.
/// </summary>
/// <param name="gameTime">Bietet einen Schnappschuss der Timing-Werte.</param>
protected override void Draw(GameTime gameTime)
{
GraphicsDevice.Clear(Color.CornflowerBlue);
spriteBatch.Begin();
spriteBatch.Draw(bg, new Rectangle(0, 0, graphics.PreferredBackBufferWidth, graphics.PreferredBackBufferHeight), Color.White);
spriteBatch.Draw(wk, new Rectangle(player_X, player_Y, 40, 60 ), Color.White);
spriteBatch.Draw(mk, new Rectangle(player_XM, player_YM, 40, 60), Color.White);
Texture2D MyTexture = new Texture2D(graphics.GraphicsDevice, 32, 32);
MyTextureList.Add(wk);
MyTextureList.Add(mk);
if (collision)
{
spriteBatch.Draw(bg, new Rectangle(0, 0, graphics.PreferredBackBufferWidth, graphics.PreferredBackBufferHeight), Color.Green);
spriteBatch.Draw(wk, new Rectangle(player_X, player_Y, 40, 60), Color.White);
spriteBatch.Draw(mk, new Rectangle(player_XM, player_YM, 40, 60), Color.White);
}
spriteBatch.End();
// TODO: Fügen Sie Ihren Zeichnungscode hier hinzu
base.Draw(gameTime);
}
}
}
Edit:
@testerws
Das Problem ist das nur 2 bestimmte Texturen bei Berührung etwas machen sollen und da der Background auch ne 2dtexture ist denkt der pc das bei berürung des BG auch die interaktion kommen soll.