Willkommen |
|
myGully |
|
Links |
|
Forum |
|
|
|
 |
01.09.11, 13:35
|
#1
|
Anfänger
Registriert seit: May 2010
Beiträge: 14
Bedankt: 0
|
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.
|
|
|
02.09.11, 11:57
|
#2
|
Anfänger
Registriert seit: Jan 2010
Beiträge: 1
Bedankt: 0
|
Zitat:
Zitat von MetalForLive
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.
|
Du musst dem Programm auch sagen wann überhaupt eine Kollision passiert, das hast du irgendwie vergessen.
Ernsthaft, in dem bisschen Code das du gepostet hast sind so viele Fehler drin dass dir hier niemand wirklich helfen kann ohne komplett bei null anzufangen. Das geht bei der gar nicht erst implementierten Kollisionsabfrage los, geht damit weiter dass sich die Spielerfiguren auf unterschiedlich schnellen Rechnern auch unterschiedlich schnell bewegen werden, die Sprites werden unnötigerweise jede Runde zweimal gezeichnet, und schließlich wird dir nach kurzer Zeit der Speicher überlaufen, weil du in jedem Draw() call zwei Texturen in die ArrayList wirfst. Und das waren jetzt nur die gröbsten Dinger.
Hör auf die Leute hier und lern erstmal die Grundlagen der Programmierung bevor du dich an Echtzeitanwendungen wie Spiele setzt, das wird sonst im Leben nichts.
|
|
|
Forumregeln
|
Du kannst keine neue Themen eröffnen
Du kannst keine Antworten verfassen
Du kannst keine Anhänge posten
Du kannst nicht deine Beiträge editieren
HTML-Code ist Aus.
|
|
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:16 Uhr.
().
|