Collisionsproblem mit Type
Übersicht

pepetigoBetreff: Collisionsproblem mit Type |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 ![]() |
||
Lador |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
||
pepetigoBetreff: Dim |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Wie soll das mit dem Dim gehen ich verstehe das nicht wirklich | ||
Lador |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Weiß jetzt net obs was bringt aber setz mal die Kollisionsvariablen Global...war bei mir auch so ![]() [EDIT] Sry...hab i-wie den halben Code nicht gelesen ![]() |
||
pepetigo |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
an Matthias_Blitzer was soll posten heißen??? | ||
![]() |
Silver_Knee |
![]() Antworten mit Zitat ![]() |
---|---|---|
hier reinschreiben... und zwar nur der teil der net funzt | ||
pepetigo |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group