hi, danke erstmal für deine antwort.
mir hat jemand gesagt, ich muss die game.draw und -update methoden mit den neuen beiden aus der fight-klasse überschreiben.
ich habe dann die fight klasse von der Microsoft.XNA.Framework.Game klasse abgeleitet und die besagten methoden wie in der game1.cs mit "protected override void" überschrieben.
|
C#-Quelltext
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
|
public class Fight : Microsoft.Xna.Framework.Game {
#region fields
public bool IsFighting { get; set; }
SpriteBatch spriteBatch;
Texture2D enemyTexture;
Vector2 enemyLocation;
private string enemyName;
private int enemyCount;
#endregion
#region constructor
public Fight(string enemy, int enemycount, ContentManager Content, SpriteBatch spritebatch)
{
IsFighting = true; //gibt an, ob der kampf läuft
spriteBatch = spritebatch; //übergibt spritebatch
enemyName = enemy;
enemyCount = enemycount;
enemyLocation.X = 100; //position der textur
enemyLocation.Y = 100;
Load(enemyName, enemyCount, Content); //ruft load funktion auf
}
#endregion
#region private methods
private void Load(string enemName, int enemCount, ContentManager Content) //lädt textur des übergebenen gegners
{
switch(enemName)
{
case "ork": enemyTexture = Content.Load<Texture2D>("ork"); break;
}
}
#endregion
#region public methods
public void DoFightProgress(GameTime gameTime) //methode, die von außen verwendet wird, um update und draw aufzurufen
{
Update(gameTime);
Draw(gameTime);
}
protected override void Update(GameTime gameTime)
{
if (Keyboard.GetState().IsKeyDown(Keys.F1)) //prüft, ob F1gedrückt wurde
{
IsFighting = false; //wenn ja, dann unterbreche kampf
}
base.Update(gameTime);
}
protected override void Draw(GameTime gameTime)
{
spriteBatch.Begin(); //spritebatch, der vorerst nur den gegner zeichnet
spriteBatch.Draw(enemyTexture, new Rectangle((int)enemyLocation.X, (int)enemyLocation.Y, enemyTexture.Width, enemyTexture.Height), Color.White);
spriteBatch.End();
base.Draw(gameTime);
}
#endregion }
|
hier ist nochmal der code meiner klasse.
in der klasse, die das fight-objekt erzeugt, wird folgendes durchgeführt:
|
C#-Quelltext
|
1
2
3
4
5
6
|
private void fight(string enemy, int enemy_count, SpriteBatch spriteBatch, ContentManager Content, GameTime gameTime) {
fight_ = new Fight(enemy, enemy_count, Content, spriteBatch);
while(fight_.IsFighting)
{
fight_.DoFightProgress(gameTime);
} }
|
hier wird nur nach einer abfrage die fight-methode aufgerufen, die dann die gesamte kampfhandlung mithilfe der fight-klasse durchführt. wenn IsFighting auf false steht, soll die schleife verlassen werden.
das problem an der sache ist das gleiche. habe ich grundlegend etwas falsch gemacht, oder nur etwas kleines übersehen?