verwirrung bei collision
Übersicht

TarnumBetreff: verwirrung bei collision |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
||
![]() |
BladeRunnerModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
oh jo das delete cash.bonus hab ich ausversehen zwecks vereinfachung des codes gelöscht ![]() 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. |
||
![]() |
BladeRunnerModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 ![]() 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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
ok ich hab jetzt verstanden , dasses nich geht ![]() 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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
ah danke, das klingt einleuchtend ![]() 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? |
||
![]() |
BladeRunnerModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Sowohl Zocker als auch du haben selbstredend recht. ![]() 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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
-> Allgemein.. | ||
Tarnum |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
oh jetzt gehts... hab jetzt die große for next = each schleife nochmal durch 3 einzelne ersetzt... | ||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group