verwirrung bei collision

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

 

Tarnum

Betreff: verwirrung bei collision

BeitragMo, Mai 31, 2004 12:06
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich bins ma wieder und wieder mit einem neuen problem... und zwar:
wenn ich auf die gegner schiesse und ein bestimmter z8fallswert erzeugt wird, entstehen boni .. in meinem beispiel der cash, lebens und special bonus.. aber was mich jetzt verwirrt ist, dass bb die kollision die ersten beiden boni so verarbeitet wie ich es haben will, also z.b. cash oder leben erhöht, aber der 3. immer fehlerhaft ist, egal in welche reihenfolge ich die 3 teile schiebe...

und hier der code

das is der bonus type :
Type bonus
Field x
Field y
Field geld
Field life
Field typ
Field zahl
End Type

Code: [AUSKLAPPEN]

For schiff.boot = Each boot
     For cash.bonus = Each bonus
        If ImagesCollide (cash\typ, cash\x , cash\y, 0 , selber, schiff\x, schiff\y, schiff\frame) Then       
            schiff\cash = schiff\cash + cash\geld
        EndIf
     Next
     
     For special.bonus = Each bonus
        If ImagesCollide (special\typ, special\x, special\y, 0 , selber, schiff\x, schiff\y, schiff\frame) Then
          schiff\special1anzahl = schiff\special1anzahl + special\zahl
          Delete special.bonus
        EndIf
     Next   

      For life.bonus = Each bonus
         If ImagesCollide (life\typ , life\x, life\y, 0 , selber, schiff\x , schiff\y, schiff\frame) Then           
            schiff\leben = schiff\leben + life\life
            If schiff\leben > 100 Then schiff\leben = schiff\leben + 100 - schiff\leben
            Delete life.bonus
          EndIf
      Next
Next

BladeRunner

Moderator

BeitragMo, Mai 31, 2004 12:17
Antworten mit Zitat
Benutzer-Profile anzeigen
Was für ein Fehler tritt denn auf? Was sollte eigentlich passieren ? Der Code sieht eigentlich ganz vernünftig aus (bis auf Delete cash.bonus, das fehlt).
Vielleicht liegt dein Fehler woanders ?
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3
Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64
B3D BMax MaxGUI

Stolzer Gewinner des BAC#48, #52 & #92
 

Tarnum

BeitragMo, Mai 31, 2004 12:24
Antworten mit Zitat
Benutzer-Profile anzeigen
oh jo das delete cash.bonus hab ich ausversehen zwecks vereinfachung des codes gelöscht Wink

Also die boni sollen von oben auf den spieler herabgehen und wenn der spieler sie einsammelt , also mit ihnen collidiert , dann den entsprechenden wert verändern , wie z.b. leben, anzahl superwaffen oder geld... so bei meinem spiel ist es jetzt so wenn ich den code so einfüge, dass die objekte alle erscheinen, man sie auch alle einsammeln kann, aber nicht alle werte verändert werden... so werden in der reihenfolge von den type collisionen nur der geldwert und der specialwert verändert, aber der lebenswert bleibt unverändert.

BladeRunner

Moderator

BeitragMo, Mai 31, 2004 12:30
Antworten mit Zitat
Benutzer-Profile anzeigen
Code: [AUSKLAPPEN]
      For life.bonus = Each bonus
         If ImagesCollide (life\typ , life\x, life\y, 0 , selber, schiff\x , schiff\y, schiff\frame) Then           
            schiff\leben = schiff\leben + life\life ;field und Container haben denselben Namen: Fehlerquelle
            If schiff\leben > 100 Then schiff\leben = schiff\leben + 100 - schiff\leben ;-> schiff\leben=100 wär dasselbe ;)
            Delete life.bonus
          EndIf
      Next


Hab nochmal drübergeguckt (hatte vorher vorallem specials im Auge). Mögliche Fehlerquelle ist im Code markiert. Lass dir nen andren Namen dafür einfallen und probier es nochmal.
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3
Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64
B3D BMax MaxGUI

Stolzer Gewinner des BAC#48, #52 & #92
 

Tarnum

BeitragMo, Mai 31, 2004 13:21
Antworten mit Zitat
Benutzer-Profile anzeigen
ne daran liegtes nich... aber ich hab mir den code nochmal angeguckt und ausprobiert und so...

1.. das schiff\cash ist von mir vereinfacht und ist in dem eigentlichen code eigentlich schiff_cash Smile

2. ich hab rausgekriegt dass die special types auch als "collidiert" berechnet werden in der for life.bonus = each bonus schleife, also dass man irgendwie leben dazukriegt wenn man n special dings einsammelt...
Weißt du wie man das ändern kann? finds auch irgendwie ziemlich komisch, wenn alles bonus container berecnet werden, obwohl man vorher in der schleife angibt, dass nur die von LIFE.bonus berechnet werden sollen...
 

zocker2150

BeitragMo, Mai 31, 2004 14:40
Antworten mit Zitat
Benutzer-Profile anzeigen
Genau das gleiche problem hab ich auch.
https://www.blitzforum.de/viewtopic.php?t=3591

Noch was....
Wenn du einen Type hat und ein variable.Type erstellst.
Bei dir "cash.bonus", "special.bonus", "life.bonus".
Und jetzt cash.bonus mit
Code: [AUSKLAPPEN]
For cash.bonus = Each bonus

druchgehst, werden alle .bonus in der Schleife abgearbeitet.

http://www.blitzbase.de/tutorials/shadow_1.htm
Zitat:
Achtung! In BlitzBasic gibt es keine Type-Instanzen. Es gibt nur eine einzige Type-Kollektion, auch wenn man viele verschiedene Type-Variablen verwendet. Darum funktioniert dieser Code nicht so wie man das auf den ersten Blick vermuten möchte:

TYPE alien
FIELD x
FIELD y
END TYPE

LOCAL a.alien
LOCAL b.alien

FOR i=1 TO 10
a=NEW alien
NEXT

FOR i=1 TO 10
b=NEW alien
NEXT

FOR a=EACH alien
...
NEXT

FOR b=EACH alien
...
NEXT

In dem Beispiel wurden 20 Objekte erstellt. Egal über welche Variable man nun alle Objekte abarbeiten möchte, es werden immer die 20 Objekte abgearbeitet. Ich denke das ist auch logisch, da unsere Variable dauernd nur zu einem Objekt gelinkt werden kann.
 

Tarnum

BeitragMo, Mai 31, 2004 20:45
Antworten mit Zitat
Benutzer-Profile anzeigen
ok ich hab jetzt verstanden , dasses nich geht Smile
aber aus der hilfestellung bei zockers anfrage werd ich trotzdem ncih schlauer.. dass alle abgearbeitet werden find ich ja noch irgendwie logisch weils ja EACH bonus heißt, aber dass dann BB irgendwie die Grafiken nich beachtet und die koordinaten und dann einfach den imagecollide befehl für alle types aus dem bereich ausführt, aber den cash collide befehl richtg ausführt...

zocker kannst du mir sagen wie du das jetzt geändert hast bei dir damit es funktioniert?
 

zocker2150

BeitragMo, Mai 31, 2004 21:50
Antworten mit Zitat
Benutzer-Profile anzeigen
Ok
Ich hab mir nochmal ein Field gemacht (Namen$) das würde bei dir dann "cash", "special" und "life" beinhalten.

Jetzt machst du nur eine valiable vom Type bonus sowas wie Item.bonus.
Jetzt die Schleife
Code: [AUSKLAPPEN]
 
For schiff.boot = Each boot
   For Item.bonus = Each bonus

      If Item\Name$ = "cash" Then
         If ImagesCollide (cash\typ, cash\x , cash\y, 0 , selber, schiff\x, schiff\y, schiff\frame) Then       
            schiff\cash = schiff\cash + cash\geld
            Delete Item.bonus
            Exit
         End If
      EndIf
      
      If Item\Name$ = "special" Then
         If ImagesCollide (special\typ, special\x, special\y, 0 , selber, schiff\x, schiff\y, schiff\frame) Then
            schiff\special1anzahl = schiff\special1anzahl + special\zahl
            Delete Item.bonus
            Exit
         EndIf
      End If
      
      usw.........
      
   Next
Next
 

Tarnum

BeitragMo, Mai 31, 2004 22:07
Antworten mit Zitat
Benutzer-Profile anzeigen
ah danke, das klingt einleuchtend Smile
könnte man nich

Code: [AUSKLAPPEN]

  for schiff.boot = each boot
     for special.bonues = each bonus    ;es werden doch eh alle durchgearbeitet, warum dann n neues field erstellen?
        if special\typ = dasunddas ;damit ich kein neues field einbauen muss, hab schond as field typ verarbeitet
           if imagescollide   
        endif




würde das theoretisch auch gehen? also so wie ich die irgendwie unlogischen types jetzt verstanden hab müsste das funktionieren, oder was meinst du?

BladeRunner

Moderator

BeitragDi, Jun 01, 2004 5:46
Antworten mit Zitat
Benutzer-Profile anzeigen
Sowohl Zocker als auch du haben selbstredend recht. Embarassed
Ich bin blind davon ausgegangen dass du die Types schon irgendwo unterscheidest.
Wenn Du jedoch schon nach dem Feld typ entscheidest, was es für ein Bonus ist, kannst du eigentlich auch life,cash und zahl zu einem Feld zusammenfassen. (es ist ja zweifelsfrei geklärt welcher Wert erhöht werden soll)
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3
Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64
B3D BMax MaxGUI

Stolzer Gewinner des BAC#48, #52 & #92
 

Tarnum

BeitragDi, Jun 01, 2004 21:50
Antworten mit Zitat
Benutzer-Profile anzeigen
Hmhmhh jetzt produziert BB schon wieder n fehler : Image does not exist .. da der neue collidecode, ich frag mich aber, warum jetzt das image nich mehr existiert, ging ja vorher davon gesehen her auch, als ich noch nich die schleifen um jedes imagescollide gebaaut hatte und das if typ = x ... (der fehler kommt auch, wenn der bonus n lifebonus is, liegt also ncih an dem for life.bonus = Each bonus)

Code: [AUSKLAPPEN]

For schiff.boot = Each boot
    For life.bonus = Each bonus

      If cash\typ = cash50 Or cash\typ= cash100 Or cash\typ = cash200 Then
        If ImagesCollide (cash\typ, cash\x , cash\y, 0 , selber, schiff\x, schiff\y, schiff\frame) Then
           For ii = 1 To 3
             If cash\geld = 2^(ii-1)*50 Then
                schiff\cash = schiff\cash + 2^(ii-1)*50       
                Delete cash.bonus
                ii = 3
             EndIf
           Next
        EndIf
     EndIf
     
     If life\typ = lifebonus1 Or life\typ = lifebonus2 Then
        If ImagesCollide (life\typ , life\x, life\y, 0 , selber, schiff\x , schiff\y, schiff\frame) Then
          schiff\leben = schiff\leben + life\leben
          If schiff\leben > 100 Then schiff\leben = schiff\leben + 100 - schiff\leben
          Delete life.bonus
        EndIf
     EndIf

     If special\typ = special1bonus Or special\typ= special1bonusx5 Then     
        If ImagesCollide (special\typ, special\x, special\y, 0 , selber, schiff\x, schiff\y, schiff\frame) Then
          schiff\special1 = schiff\special1 + special\zahl
          Delete special.bonus
        EndIf
     EndIf

    Next   
  Next
 

zocker2150

BeitragMi, Jun 02, 2004 17:45
Antworten mit Zitat
Benutzer-Profile anzeigen
Code: [AUSKLAPPEN]
If ImagesCollide (cash\typ, cash\x , cash\y, 0 , selber, schiff\x, schiff\y, schiff\frame) Then


Ich würde dort nicht mit cash\typ (life\typ, special\typ) den Bildnamen angeben sondern mit dem "richtigen" Namen so wie du ihn oben in deinem Programm mit LoadImage bzw. LoadAnimImage geladen hast.


Wenn doch dann vorher cash\typ% (life\typ%, special\typ%) mit dem Bild-Namen speichern.
cash\typ% = Bild-Name.

Triton

BeitragMi, Jun 02, 2004 19:17
Antworten mit Zitat
Benutzer-Profile anzeigen
-> Allgemein..
 

Tarnum

BeitragFr, Jun 04, 2004 18:09
Antworten mit Zitat
Benutzer-Profile anzeigen
oh jetzt gehts... hab jetzt die große for next = each schleife nochmal durch 3 einzelne ersetzt...

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group