Collisionsproblem mit Type

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

 

pepetigo

Betreff: Collisionsproblem mit Type

BeitragFr, Jul 13, 2007 18:57
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo,
ich habe ein Problem mit der Collision Spieler -> Type könnt ihr mir das mal kurz erläutern, bitte ??? und ich möchte das die "gegner" alle unterschiedlich schnell sind.
Hier der Code:
Code: [AUSKLAPPEN]
;Grafikmodus setzen
Graphics 640, 480, 16, 2

;Fenstertitel bestimmen
AppTitle "Schuss frei"

;Alle benötigten Bilder laden und gegebenfalls mit transparenz versorgen
Global spieler_1 = LoadImage("gfx/Spieler_1.png")
MaskImage spieler_1 ,255, 0, 255
Global gegner_1 = LoadImage("gfx/gegner_2.png")
MaskImage gegner_1 ,255, 0, 255
Global gegner_2 = LoadImage("gfx/gegner_2.png")
MaskImage gegner_2 ,255, 0, 255
Global stars=LoadImage("gfx/stars.bmp")
Global loser=LoadImage("gfx/loser.png")
MaskImage loser, 255, 0, 255


;Hintergrundvariablen
Global x_star = 1
;Gegnervariablen
SeedRnd MilliSecs()
Global Gegner_pos_X = Rnd(1, 640)
Global Gegner_pos_Y = 1
Global gtimer = MilliSecs()

;Spielervariablen
Global leben = 100
Global schaden = 1
Global stimer = MilliSecs()
Global Player_pos_X

;Type
Type gegner_2
   Field gposx
   Field gposy
   End Type

   For wieder = 0 To 1000
      info.gegner_2 = New gegner_2
      info\gposx = Rnd(0,620)
      info\gposy = Rnd(-10000,-20)
Next

;buffer setzen u. Spieler zeichnen
SetBuffer BackBuffer()
DrawImage spieler_1, 0, 380
;Musik
Global titelsound = LoadSound("sound/17_sasha_-_goodbye.mp3");(namen ersetzen für eigenes lied)
sound()


neuesspiel()


;//////////////////FUNKTIONEN\\\\\\\\\\\\\\\\\\\\\\\

Function sound()
   LoopSound titelsound
   titelsound =PlaySound(titelsound)
End Function

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

Function gegner_1()
   DrawImage gegner_1, Gegner_pos_X, Gegner_pos_Y
      If MilliSecs() > gtimer + 150
         Gegner_pos_Y=Gegner_pos_Y+5
         gtimer=MilliSecs()
      EndIf
End Function

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

Function lose()
   Cls
   Repeat
      DrawImage loser, 20, 140
        star()
      Flip
      If KeyHit(57) Or KeyHit(28) Or KeyHit(1) neuesspiel()
   Forever
End Function

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

Function star()
   TileImage stars, x_star, 1

   x_star = x_star + 1
   If x_star = 201 Then x_star = 1
End Function

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

Function collide()
If ImagesCollide(spieler_1, Player_pos_X, 380, 0, gegner_1, Gegner_pos_X, Gegner_pos_Y, 0)
DrawImage spieler_1,player_pos_x,380
DrawImage gegner_1, Gegner_pos_X, Gegner_pos_Y

leben = leben - schaden
EndIf
End Function

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

Function collide_type()
If ImagesCollide(spieler_1, Player_pos_X, 380, 0, gegner_2, info\gposx, info\gposy, 0)
leben = leben - schaden
EndIf
End Function
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

Function neuesspiel()
   DrawImage spieler_1, 0, 380
   leben = 100
   ;HAUPTSCHLEIFE
   Repeat
   ;funktionen
      star()
      collide()
      drawgeist()

   ;Leben etc.
      Text 1,1,"Leben:" + leben
       If leben <= 0 Then lose()

   ;spieler bewegen
      If KeyDown(203)
      
         If MilliSecs() > stimer + 100
            Player_pos_X=Player_pos_X-20
            stimer=MilliSecs()
         EndIf
         If Player_pos_X=<0 Then Player_pos_X=1
      EndIf
      If KeyDown(205)
   
         If MilliSecs() > stimer + 100
            player_pos_x=player_pos_X +20
            stimer=MilliSecs()
         EndIf
         If Player_pos_X=>540 Then Player_pos_X=540
      EndIf
   ;Spieler zeichnen (positionswechsel?)
      DrawImage spieler_1,player_pos_x,380
   ;Buffer swap u. altes bild cls
      Flip
      Cls   

   ;ENDE HAUPTSCHLEIFE
   Until KeyHit(1)

   ;beenden
   End
End Function

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

Function Drawgeist()
SeedRnd MilliSecs()
speed = Rnd(4, 6)

For info.gegner_2 = Each gegner_2
DrawImage gegner_2, info\gposx, info\gposy
info\gposy = info\gposy + speed
Next
Delay 25
End Function


Danke Very Happy
 

Lador

BeitragFr, Jul 13, 2007 19:18
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi, wäre nett, wenn du nur die Codeausschnitte hier zeigen würdest, die auch mit dem tatsächlichen Problem zu tun haben. Aber dein Fehler ist:

Du brauchst die Schleife "For info.gegner2 = Each gegner2" für deine Funktion "collide_type". Außerdem scheinst du alles noch nicht so ganz verstanden zu haben:

Bei "lose()" brauchst du keine Repeat-Schleife! Die Funktion wird schon innerhalb einer Wiederholschleife aufgerufen!

Wenn du 1000 Gegner machen willst, warum machst du kein Dim-Feld? Diese Art, die Types zu benutzen, wie du es machst, macht man nur bei einer ZUFÄLLIGEN Anzahl von Objekten.

Lies dir am besten ein Type-Tutorial durch, und wenn du es noch nicht gemacht hast, wären die Anfänger-Tutorials von robsite.de oder ein gutes Buch auch sehr hilfreich.

MFG Lador
 

pepetigo

Betreff: Dim

BeitragFr, Jul 13, 2007 19:33
Antworten mit Zitat
Benutzer-Profile anzeigen
Wie soll das mit dem Dim gehen ich verstehe das nicht wirklich
 

Lador

BeitragFr, Jul 13, 2007 21:05
Antworten mit Zitat
Benutzer-Profile anzeigen
Code: [AUSKLAPPEN]
Dim info.gegner2(1000)

For wieder = 0 To 1000
 info.gegner2(wieder) = New gegner2
 info\gposx = Rnd(0,620)
 info\gposy = Rnd(-10000,-20)
Next


Ich empfehle dir dringend Type-Tutorials!

http://www.robsite.de/tutorials.php?tut=blitzbasic

MFG Lador
 

Matthias_Blitzer

BeitragFr, Jul 13, 2007 21:19
Antworten mit Zitat
Benutzer-Profile anzeigen
Du prüfst ja pro Schleifendurchlauf 1000mal mit ImagesCollide, das stellt einen enormen Rechenaufwand dar.
Ansonsten verstehe ich auch noch nicht wirklich wie du dort was prüfen willst und was du damit zu erreich versuchst.
Poste mal den fehlerhaften Code und beschreibe was er machen soll, aber nicht tut.

the FR3AK

BeitragFr, Jul 13, 2007 22:01
Antworten mit Zitat
Benutzer-Profile anzeigen
Weiß jetzt net obs was bringt aber setz mal die Kollisionsvariablen Global...war bei mir auch so Idea

[EDIT]

Sry...hab i-wie den halben Code nicht gelesen Laughing
 

pepetigo

BeitragFr, Jul 13, 2007 23:05
Antworten mit Zitat
Benutzer-Profile anzeigen
an Matthias_Blitzer was soll posten heißen???

Silver_Knee

BeitragSa, Jul 14, 2007 9:40
Antworten mit Zitat
Benutzer-Profile anzeigen
hier reinschreiben... und zwar nur der teil der net funzt
 

pepetigo

BeitragSo, Jul 15, 2007 19:29
Antworten mit Zitat
Benutzer-Profile anzeigen
Also ich habe jetzt in Gelb hinzugefügt was gemacht werden soll oder was geladen werden soll.
Vieleicht koönnt ihr es mir mal verbessern.
Und hat vielleicht jemand ein kleines 3D Spiel programmiert und kann mir das zum nachlesen wie das so ungefähr aussehen soll.

Hier der Code:
Code: [AUSKLAPPEN]
;Grafikmodus setzen
Graphics 640, 480, 16, 2

;Fenstertitel bestimmen
AppTitle "Schuss frei"

;Alle benötigten Bilder laden und gegebenfalls mit transparenz versorgen
Global spieler_1 = LoadImage("gfx/Spieler_1.png")
MaskImage spieler_1 ,255, 0, 255
Global gegner_1 = LoadImage("gfx/gegner_2.png")
MaskImage gegner_1 ,255, 0, 255
Global gegner_2 = LoadImage("gfx/gegner_2.png")
MaskImage gegner_2 ,255, 0, 255
Global stars=LoadImage("gfx/stars.bmp")
Global loser=LoadImage("gfx/loser.png")
MaskImage loser, 255, 0, 255


;Hintergrundvariablen
Global x_star = 1
;Gegnervariablen
SeedRnd MilliSecs()
Global Gegner_pos_X = Rnd(1, 640)
Global Gegner_pos_Y = 1
Global gtimer = MilliSecs()

;Spielervariablen
Global leben = 3
Global schaden = 1
Global stimer = MilliSecs()
Global Player_pos_X

;Type oder Dim, weiß ich nicht was könnt ihr mir empfehlen ???

;buffer setzen u. Spieler zeichnen
SetBuffer BackBuffer()
DrawImage spieler_1, 0, 380
;Musik
Global titelsound = LoadSound("sound/17_sasha_-_goodbye.mp3");(namen ersetzen für eigenes lied)
sound()


neuesspiel()


;//////////////////FUNKTIONEN\\\\\\\\\\\\\\\\\\\\\\\

Function sound()
   LoopSound titelsound
   titelsound =PlaySound(titelsound)
End Function

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

Function gegner_1()
   DrawImage gegner_1, Gegner_pos_X, Gegner_pos_Y
      If MilliSecs() > gtimer + 150
         Gegner_pos_Y=Gegner_pos_Y+5
         gtimer=MilliSecs()
      EndIf
End Function

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

Function lose()
   Cls
      DrawImage loser, 20, 140
        star()
      Flip
      If KeyHit(57) Or KeyHit(28) Or KeyHit(1) neuesspiel()
End Function

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

Function star()
   TileImage stars, x_star, 1

   x_star = x_star + 1
   If x_star = 201 Then x_star = 1
End Function

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

Function collide()
If ImagesCollide(spieler_1, Player_pos_X, 380, 0, gegner_1, Gegner_pos_X, Gegner_pos_Y, 0)
DrawImage spieler_1,player_pos_x,380
DrawImage gegner_1, Gegner_pos_X, Gegner_pos_Y

leben = leben - schaden
EndIf
End Function

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

Function neuesspiel()
   DrawImage spieler_1, 0, 380
   leben = 3
   ;HAUPTSCHLEIFE
   Repeat
   ;funktionen
      star()
      collide()
      drawgeist()

   ;Leben etc.
      Text 1,1,"Leben:" + leben
       If leben <= 0 Then lose()
      If KeyHit(57) Then leben = leben - 1

   ;Es sollen ungefähl 1000 Gegner auf 10000 der Achse y kommen und wenn die mit dem spieler Kollidieren soll ein Leben von 3 abgezogen werden ! ! !

   ;spieler bewegen
      If KeyDown(203)
      
         If MilliSecs() > stimer + 100
            Player_pos_X=Player_pos_X-20
            stimer=MilliSecs()
         EndIf
         If Player_pos_X=<0 Then Player_pos_X=1
      EndIf
      If KeyDown(205)
   
         If MilliSecs() > stimer + 100
            player_pos_x=player_pos_X +20
            stimer=MilliSecs()
         EndIf
         If Player_pos_X=>540 Then Player_pos_X=540
      EndIf
   ;Spieler zeichnen (positionswechsel?)
      DrawImage spieler_1,player_pos_x,380
   ;Buffer swap u. altes bild cls
      Flip
      Cls   

   ;ENDE HAUPTSCHLEIFE
   Until KeyHit(1)

   ;beenden
   End
End Function

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group