type kollision

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

 

BlackTermi

Betreff: type kollision

BeitragFr, Apr 29, 2005 17:34
Antworten mit Zitat
Benutzer-Profile anzeigen
also, um mein problem zu beschreiben, ich will wenn ein type das andere berührt (also If ImagesCollide ) soll dasjenige der beiden das den kleineren wert im wachstum hat mit delete gelöscht wird. Ich habe nun aber das problem, das es sich um die selbe type art (ein bak.bakterie) handelt. Und nun habe ich einfach keine ahnung wie ich die types anspreche, weil ich kann es ja nicht so, oder ähnlich machen, oder?:

BlitzBasic: [AUSKLAPPEN]

Function Fight()
For bak.bakterie = Each bakterie
For bak.bakterie = Each bakterie
If ImagesCollide(bak\image,bak\xpos+scrollx,bak\ypos+scrolly,bak\kultur,bak\image,bak\xpos+scrollx,bak\ypos+scrolly,bak\kultur)
If bak\wachstum < bak\wachstum
Delete bak
EndIf
EndIf
EndIf
Next
Next
End Function

BladeRunner

Moderator

BeitragFr, Apr 29, 2005 17:47
Antworten mit Zitat
Benutzer-Profile anzeigen
hahe dran. mach a.bakterie und b.bakterie und es geht. der vodere Teil ist ja nur ein identifier- es werden dennoch alle instanzen durchlaufen.
Allerdings achtung: du überprüfst dann automatisch die instanz auch mit sich selbst.
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
 

hitokiri

BeitragFr, Apr 29, 2005 18:11
Antworten mit Zitat
Benutzer-Profile anzeigen
will heissen, wenn eine kollision zustande kommt und die bakterie den kürzeren zieht musst du die for next schleife exiten oder es kommt nen memory violation oder access error weil ein type der nicht existiert überprüft wird
 

Blitzkrieg Bop

BeitragFr, Apr 29, 2005 18:18
Antworten mit Zitat
Benutzer-Profile anzeigen
Ne das ist ja Quatsch!
Wenn man nen Type inerhalb der For/Next Schleife löscht, muss man nur "exiten", wenn danach eine Anweisung folgt, die auf diesen Type zurückweißt.
~ Hey Ho Let's Go ~

Alfadur

BeitragFr, Apr 29, 2005 19:03
Antworten mit Zitat
Benutzer-Profile anzeigen
stimmt .-) das einzige was du noch machen mußt ist

if a<>b then ... damit du nicht zwei gleiche instanzen überprüfst...
A Cray is the only computer that runs an endless loop in less than four hours.
 

BlackTermi

BeitragFr, Apr 29, 2005 19:13
Antworten mit Zitat
Benutzer-Profile anzeigen
ok, Danke an alle, ich selbst bin dabei schon fast verzweifelt...
 

hitokiri

BeitragFr, Apr 29, 2005 20:13
Antworten mit Zitat
Benutzer-Profile anzeigen
Man berichtige mich wenn ich falsch liege aber nach dem modell wäre es doch:
for a.type = each type
for b.type= each type
if a.type/zeugs<b.type/zeugs
delete a.type
else
delete b.type
..

also würde er doch dann einen nicht existenten a mit den anderen b zu vergleichen suchen also müsste er exiten und zum nächsten a springen.
 

Blitzkrieg Bop

BeitragFr, Apr 29, 2005 23:57
Antworten mit Zitat
Benutzer-Profile anzeigen
Häh?!
Warum denn / ? Wenn dann \, oder was meinst du ?
Ich habe jetzt ein schnelles Beispiel gemacht.
Drück man die Leertaste wird jeweils ein Type gelöscht, ohne exit.

BlitzBasic: [AUSKLAPPEN]

Graphics 640,480,16,2
SetBuffer BackBuffer()
SeedRnd MilliSecs()

Type Kreis
Field x,y,wert
End Type

For i = 1 To 2
K.Kreis = New Kreis
K\wert = Rand(20,50)
K\x = 200+i*19
K\y = 200
Next

Repeat
Cls

For K.Kreis = Each Kreis
Oval K\x,K\y,20,20,0
Text K\x+20/2,K\y-20/2,K\wert,1,1
If KeyHit(57)
For K2.Kreis = Each Kreis
If K <> K2
If RectsOverlap(K\x,K\y,20,20,K2\x,K2\y,20,20)
If K\wert < K2\wert Delete K Else Delete K2
EndIf
EndIf
Next
EndIf
Next

Flip
Until KeyHit(1):End


Damit sollte das nun klar sein !? Very Happy
~ Hey Ho Let's Go ~

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group