Permalänk
Medlem

C# XNA 4.0 Gameover screen!

Hej! Jag har precis börjat hålla på med XNA i C# och jag har kommit till den del att jag vill att mitt program ska visa en game over bild.

Har två bollar en som jag styr samt en som flyger lite fram och tillbaka. När de träffas vill jag att den här "Kill screenen" ska komma fram och stanna där. Så hur ska jag göra för att få programmet att sluta skriva ut nytt hela tiden?

// TODO: Add your drawing code here spriteBatch.Begin(); if (DetectBallEnemyCollision()) spriteBatch.Draw(gameover, gameoverPosition, Color.White); else { //Skriver ut min boll spriteBatch.Draw(ball, position, Color.White); //Skriver ut min fiende spriteBatch.Draw(enemy, positionEnemy, Color.White); } spriteBatch.End(); base.Draw(gameTime); } public Boolean DetectBallEnemyCollision() { //Kollar om de kolliderar if ((positionEnemy.Y + enemy.Height) == position.Y && (positionEnemy.X + enemy.Width) == position.X) return true; else return false; }

Det här är så långt jag har kommit med min "kill screen" hoppas att ni kan hjälpa mig :)! Ni får även hjälpa till om något med kollisions satsen är helt fel.

MVH Dalgren!

Visa signatur

Crosshair IV | 1055T @ 3.2 GHz | 4 GB Corsair dominator | Corsair H50 | Fractal Design R3 | 2x PowerColor 6950 2GB | Corsair HX 750W

Permalänk

Ditt kollisions test ser lite märkligt ut, eftersom du använder cirklar så kolla upp "circle vs circle intersection test", finns väldigt mycket på google. Huvudpoängen är att om summan av de båda cirklarnas radier är mindre än eller lika med avståndet mellan cirklarnas mittpunkter så är det kollision. Säg till ifall du behöver mer hjälp eller något är oklart!

Lite avancerat sätt att hantera olika states i spelet:
Lättaste sättet för game over-screens är liknande att ha olika states i spelet, dessa states:en kan representeras i separata klasser och/eller olika int värden. Huvudpoängen är i alla fall att när staten är t.ex. GAME_RUNNING så körs bara kod som berör själva spelet, uppdatera ai spelar position, rendera spelsaker. Sen kan man ha andra states så som MENU och GAME_OVER. I GAME_OVER så kanske du bara renderar en game over screen (kanske skriver ut highscore?) och väntar på att spelaren ska trycka space för att komma till menyn igen, genom att ändra state till MENU. En exempel på ett sådant state system http://www.codeguru.com/Cpp/misc/misc/article.php/c3893

Visa signatur

| Silverstone raven rv02 | Intel Core i7 920 @ 3.5ghz + Corsair H50 | Kingston DDR3 HyperX 1333MHz 6x2GB | XFX Radeon 6870 | ASUS P6T SE | Chieftec Super Series 750W |

Permalänk
Medlem
Citat:

Ditt kollisions test ser lite märkligt ut, eftersom du använder cirklar så kolla upp "circle vs circle intersection test", finns väldigt mycket på google. Huvudpoängen är att om summan av de båda cirklarnas radier är mindre än eller lika med avståndet mellan cirklarnas mittpunkter så är det kollision. Säg till ifall du behöver mer hjälp eller något är oklart!

Lite avancerat sätt att hantera olika states i spelet:
Lättaste sättet för game over-screens är liknande att ha olika states i spelet, dessa states:en kan representeras i separata klasser och/eller olika int värden. Huvudpoängen är i alla fall att när staten är t.ex. GAME_RUNNING så körs bara kod som berör själva spelet, uppdatera ai spelar position, rendera spelsaker. Sen kan man ha andra states så som MENU och GAME_OVER. I GAME_OVER så kanske du bara renderar en game over screen (kanske skriver ut highscore?) och väntar på att spelaren ska trycka space för att komma till menyn igen, genom att ändra state till MENU. En exempel på ett sådant state system http://www.codeguru.com/Cpp/misc/misc/article.php/c3893

Tack för svaret men jag är inte så himla haj på de här så jag vet inte riktigt hur jag ska få spelet att använda mitten på bolllen. För position.Y registreras väll från vänstra hörnet? Annars tror jag att jag kan ha en logaritm för att räkna ut om de träffas nånstans i hjärnan.

Det du länkade förstod jag inte så mycket av. Tror du att du skulle kunna hitta något exempel på någon sån här state sats så jag får se hur koden ligger i de olika statsen för nu är jag som ett stort frågetecken.

Visa signatur

Crosshair IV | 1055T @ 3.2 GHz | 4 GB Corsair dominator | Corsair H50 | Fractal Design R3 | 2x PowerColor 6950 2GB | Corsair HX 750W

Permalänk

Ja, utritningen är i regel från vänstra hörnet (det går visserligen att ändra i XNA). Vad du helt enkelt gör är att lägger till längden på bilden/2 i y och bredden på bilden/2 i x-led för att komma till centrum.

I en boll/cirkel så är höjden/2 samma som bredden/2.

Just ja angående Gamestate management så har microsoft bra exempel på sin hemsida, http://create.msdn.com/en-US/education/catalog/sample/game_st.... (De har massa andra XNA exempel som kan vara värda att titta på)

Visa signatur

| Silverstone raven rv02 | Intel Core i7 920 @ 3.5ghz + Corsair H50 | Kingston DDR3 HyperX 1333MHz 6x2GB | XFX Radeon 6870 | ASUS P6T SE | Chieftec Super Series 750W |