ImagesOverlap ? wenn nicht warum trotzdem bumm ?
Übersicht

Mike84Betreff: ImagesOverlap ? wenn nicht warum trotzdem bumm ? |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hallo erstmal,
Ich bin gans neu hier im Forum und ich sag es lieber gleich, ich habe viele viele rechtschreibfehler also bitte erschlagt mich nicht wenn ihr welche findet. ![]() Ich habe vor einem Monat angefangen zu Progen und versuche mich seit ein paar Tagen an ein WeltraumBallerSpiel. Aber ich komme nicht wirklich weiter . Das problem ist wenn ich einen Schuss abgebe und ich einen Gegner getroffen habe soll er gelöscht werden aber eben nur wenn ich ihn getroffen habe aber im moment ist es so wenn ich schiese macht es bumm und alle Gegner auf dem Bildschierm sind weg aber warum ? Kann mir da mal jemand einen Tipp geben. hier ist der code da wo ich denke das der fehler ist habe ich ein paar ## gemalt Code: Graphics 800,600 SetBuffer BackBuffer() Global PlayerX = 380 Global PlayerY = 550 Global Speed = 2 Global GegnerTimer =0 Global GegnerSetTimer = 160 Global GegnerSpeedX = 0 Global GegnerSpeedY = 2 hintergrund = LoadImage("stars.bmp") Schiff = LoadImage("spaceship2.bmp") blaster = LoadImage("blaster.bmp") gegnerImage = LoadImage("invader2.bmp") blasterSound = LoadSound("blaster.wav") ExplodeSound = LoadSound("bumm.wav") Type Schuss Field SchussX Field SchussY Field SchussSpeedX Field SchussSpeedY End Type Type Gegner Field GegnerX Field GegnerY Field GegnerSpeedX Field GegnerSpeedY Field GegnerArmor End Type Function AddGegner(x,y,SpeedX,SpeedY,Armor) Gegner.Gegner = New Gegner Gegner\GegnerX = x Gegner\GegnerY = y Gegner\GegnerSpeedX = SpeedX Gegner\GegnerSpeedY = SpeedY Gegner\GegnerArmor = Armor End Function Function AddSchuss(x,y,SpeedX,SpeedY) Schuss.Schuss = New Schuss Schuss\SchussX = x Schuss\SchussY = y Schuss\SchussSpeedX = SpeedX Schuss\SchussSpeedY = SpeedY End Function Playmusic("boss.mid") Repeat Cls ; Hintergrund Malen und Scrollen H = H+1 If H =200 then H =0 TileBlock hintergrund,0,H Gosub Benutzereingabe Gosub Blaster Gosub Gegner Text 0,50,"PX " + PlayerX Text 0,70,"PY " + PlayerY DrawImage Schiff,PlayerX,PlayerY Flip Until KeyDown(1) .Gegner;--------------------------------- ; Gegner nicht vorhanden dan löschen For Gegner.Gegner = Each Gegner If Gegner\GegnerY > 650 : Delete Gegner.Gegner ElseIf Gegner\GegnerY < -100 : Delete Gegner.Gegner ElseIf Gegner\GegnerX > 850 : Delete Gegner.Gegner ElseIf Gegner\GegnerX < -50 : Delete Gegner.Gegner EndIf Next ; Gegner Berechnen GegnerTimer = GegnerTimer +1 If GegnerTimer = GegnerSetTimer Then SeedRnd MilliSecs() GegnerX = Rand(20,780) GegnerY = -20 AddGegner(GegnerX,GegnerY,GegnerSpeedX,GegnerSpeedY,2) GegnerTimer =0 EndIf ; Gegner Malen For Gegner.Gegner = Each Gegner DrawImageRect gegnerImage,Gegner\GegnerX,Gegner\GegnerY,74,232,36,48 Gegner\GegnerY = Gegner\GegnerY + Gegner\GegnerSpeedY Next ;########################################################################################## ; Blaster Treffer For Gegner.Gegner = Each Gegner For Schuss.Schuss = Each Schuss If ImagesOverlap(blaster,Schuss\SchussX,Schuss\SchussY,gegnerImage,Gegner\GegnerX,Gegner\GegnerY) Delete Gegner.Gegner PlaySound(explodeSound) EndIf Next Next ; ########################################################################################### Return .Blaster;--------------------------------- ; Schuss nicht vorhanden dann löschen For Schuss.Schuss = Each Schuss If Schuss\SchussX < -3 : Delete Schuss.Schuss ElseIf Schuss\SchussX > 800 : Delete Schuss.Schuss ElseIf Schuss\SchussY < 0 : Delete Schuss.Schuss ElseIf Schuss\SchussY > 600 : Delete Schuss.Schuss EndIf Next ; Schuss vorhanden dann Malen und um Speed bewegen For Schuss.Schuss = Each Schuss DrawImage blaster, Schuss\SchussX, Schuss\SchussY Schuss\SchussX = Schuss\SchussX + Schuss\SchussSpeedX Schuss\SchussY = Schuss\SchussY + Schuss\SchussSpeedY Next Return .Benutzereingabe ;--------------------------------- ; Bewegung rechts links If KeyDown(203) And PlayerX >0 Then PlayerX = PlayerX - Speed If KeyDown(205) And PlayerX <800-imagewidth(Schiff) Then PlayerX = PlayerX + Speed ; Schiesen If Keyhit(57) Then AddSchuss(PlayerX+14,PlayerY-2,0,-2) PlaySound(blasterSound) EndIf Return Für jede art von hilfe oder verbesserungsforschläge (auser verbesserungen für rechtschreibung 8) ) bin ich sehr dankbar |
||
BlackJack |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hast du schon mal probiert bei den Funktionen mit "Add" ein
Return einzufügen und dann Variablen zuweise? Ich bin mir nciht mehr so sicher... |
||
*Team: StuffMakers by Basic_Progger* I know what I mean. |
Mike84 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
An die Function mit Add übergebe ich nur die parameter für die Typen Gegner und Schuss damit ich nicht alles einzeln schreiben muss sie sollen mir eigendlich nichts zurückgeben aber wie gesagt ich Proge erst seit einem Monat und habe noch wenig erfarung Wie müsste es dan ungefär aussehen das mit den rückgabewerten habe ich noch nicht gans verstanden | ||
![]() |
frigi |
![]() Antworten mit Zitat ![]() |
---|---|---|
Du überprüfst alle Gegner, und löschst auch alle, wenn eine Kollision stattfindet, das ist der Fehler
Du musst also prüfen, ob eine Kollision stattfindet und dann nur den Gegner löschen, der getroffen wurde. |
||
Mike84 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hmm.. ich habe ich dachte das es so geht
Es werden zwar alle überprüft ob eine colision stadtfindet aber da diese bedingung immer nur für einen zutrift nämlich der der Getroffen wird wird auch normal nur der eine gelöscht. Ich habe jetzt mal ein anderes Image als gegner genommen und da klappt es komischerweise wunderbar. Jetzt vermute ich da ich meinen Gegner aus einer Tileset lade und mit drawImageRect zeichne, dass nicht nur der Gegner den ich sehe auf die collisionsabfrage reagiert sondern auf die Gesamte tielemap. Also neue Frage: Wie Bekomme ich es hin wenn ich ein teil einer Image mit DrawImageRect zeichne das bei ImagesOverlaps auch nur der Teil erkannt wierd und nicht die Gesamte tilemap |
||
![]() |
Alfadur |
![]() Antworten mit Zitat ![]() |
---|---|---|
hm, also ich könnte mir denken das es an dem drawimagerect liegt ... ich hab dein programm mal umgeschrieben, vielleicht kannst du was damit anfangen. es funktioniert zumindest jetzt. hab die grafiken mal durch temp. bilder ersetzt ...
BlitzBasic:
ist nicht wunderschön, aber funktioniert. hab ... äh auch die gosubs durch funktionen ersetzt ... |
||
A Cray is the only computer that runs an endless loop in less than four hours. |
Mike84 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
O.H....
Danke für die mühe die du dir gemacht hast nur leuft es so etwas zu schnell bei mir ( Schumacher ist ein witz dagegen ![]() Auf jedenfall klapt es jetzt. Nochmals Danke an alle die mir geholfen haben |
||
![]() |
Alfadur |
![]() Antworten mit Zitat ![]() |
---|---|---|
naja, das mit dem hintergrund hab ich ja rausgenommen, das nimmt speed weg... wenns zu schnell läuft, schau dir mal waittimer an...
aber an und für sich ists ja besser wenn was zu schnell läuft, abbremsen geht ja immer .-) edit : achja, hab nochmal nachgedacht... das meins schneller läuft liegt daran das ich auch text weggelassen habe. text ist ein speed killer, sollte man nach möglichkeit nicht verwenden... wenn du text ausgeben willst, benutz lieber einen bitmapfont... |
||
A Cray is the only computer that runs an endless loop in less than four hours. |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group