Kollision mit Folgen
Übersicht

![]() |
SephkaBetreff: Kollision mit Folgen |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich möchte das wenn ein Panzer mit einem anderen Kollidiert das er dann stoppt aber es funkrioniert nicht.Ich probier es schon seit Stunden rauszukriegen aber es klappt nicht.Hat irgendjemand eine Idee was falsch ist??
Code: [AUSKLAPPEN] Global Width :Int = 1024,Height:Int = 600
Graphics Width,Height Global Number_of_Tanks = 5 'TYPE DEKLARIEREN Type Tank Field X#,Y# Field Dir:Int, Armor:Int=100 Field Speed:Float=2,Size:Int=25 Field ID:Int Global TankNumber=0 'Die aktuelle Zahl der Panzer End Type '_____________________________________ 'BILDER SetMaskColor 255,255,255 Global Panzer:Timage = LoadImage("Panzer.bmp",Maskedimage) If Not Panzer Then RuntimeError("Bild kann nicht geladen werden") SetBlend Maskblend '_____________________________________ Global TankList:TList = CreateList() 'Liste machen For Local Nr:Int = 1 To Number_of_Tanks Global NewTank:Tank NewTank = New Tank NewTank.Armor = Rand(1,5)*10 'Erzeugt eine Zufallsbewaffnung 10,20,30,40 or 50 NewTank.X = Rand(5,800) ;NewTank.Y = Rand(5,600)'Zufalls Startposition NewTank.Dir = Rand(0,360) 'Zufalls Richtung ListAddLast TankList,NewTank 'Gibt den neuen Panzer in die Panzerliste ein. Tank.TankNumber:+1 'Die Panzeranzahl wird um 1 erhöht NewTank.ID = Tank.TankNumber Next While Not KeyDown(Key_Escape) For T:Tank = EachIn TankList 'Lokale T hält jeweils den aktuellen Panzer in der Schleife 'SetColor 128,64,0 'DrawRect(T.X,T.Y,T.Size,T.Size) SetRotation T.Dir DrawImage panzer,T.X,T.Y SetRotation 0 SetColor 255,255,255;DrawText "Number of Tanks : "+Tank.TankNumber,20,20 T.X:+T.Speed*Cos(T.Dir) T.Y:+T.Speed*Sin(T.Dir) 'KOLLISIONEN If T.X > Width Then T.Dir = Rand(0,359);T.X = Width If T.X < 0 Then T.Dir = Rand(0,359);T.X = 0 If T.Y > Height Then T.Dir = Rand(0,360);T.Y = Height If T.Y < 0 Then T.Dir = Rand(0,359);T.Y = 0 For T2:Tank = EachIn TankList DebugLog "T"+T.ID DebugLog "T2"+T2.ID If T.TankNumber=T2.TankNumber Then Else If ImagesCollide(panzer,T.X,T.Y,0,Panzer,T2.X,T2.Y,0) = 1 Then T.Speed=0;T2.Speed=0 End If Next Next 'Dieser Loop wird für jeden Panzer in der Liste ausgeführt, bis zum letzten. Flip ;Cls Wend |
||
Mein Freund und Helfer:
Win7 Home Premium SP1 AMD Athlon II X4 645 3.1GHZ 8GB Ram 64bit |
![]() |
mpmxyz |
![]() Antworten mit Zitat ![]() |
---|---|---|
BlitzMax: [AUSKLAPPEN] T.TankNumber=T2.TankNumber Das ist immer wahr, da "TankNumber" eine globale Variable ist. Prüfe das, was du dort überprüfen möchtest lieber mit "T=T2" ab. mfG mpmxyz |
||
Moin Moin!
Projekte: DBPC CodeCruncher Mandelbrot-Renderer |
![]() |
Sephka |
![]() Antworten mit Zitat ![]() |
---|---|---|
Geht immer noch nicht....
hab jez Code: [AUSKLAPPEN] If T=T2 Then
Else If ImagesCollide(panzer,T.X,T.Y,0,Panzer,T2.X,T2.Y,0) = 1 Then T.Speed=0;T2.Speed=0 End If |
||
Mein Freund und Helfer:
Win7 Home Premium SP1 AMD Athlon II X4 645 3.1GHZ 8GB Ram 64bit |
![]() |
Hummelpups |
![]() Antworten mit Zitat ![]() |
---|---|---|
ich denke das problem wird sein das es geht, die kollision aber falsch berechnet werden da du
an ImagesCollide keine rotation und scale übergibst, das geht mit ImagesCollide2. Dein Code funktioniert bei mir, errechnet die kollision aber an interessanten punkten. Grüße |
||
blucode - webdesign - Ressource - NetzwerkSim
BlitzBasic 2D - BlitzMax - MaxGUI - Monkey - BlitzPlus |
![]() |
Sephka |
![]() Antworten mit Zitat ![]() |
---|---|---|
Bei ImagesCollide2 spuckt er "Compilr Error Unable to convert from 'brl.max2d.Timage' to 'Float'
Wenn ich Im Type X und Y zu Int(%) mache gehts es auch nicht... Edit:Ich glaub es hat sich geklärt Edit2: Wie lösche ich einen Type eintrag?? |
||
Mein Freund und Helfer:
Win7 Home Premium SP1 AMD Athlon II X4 645 3.1GHZ 8GB Ram 64bit |
![]() |
Sephka |
![]() Antworten mit Zitat ![]() |
---|---|---|
Kann mir keiner helfen??? ![]() |
||
Mein Freund und Helfer:
Win7 Home Premium SP1 AMD Athlon II X4 645 3.1GHZ 8GB Ram 64bit |
![]() |
mpmxyz |
![]() Antworten mit Zitat ![]() |
---|---|---|
Nicht gleich so ungeduldig! ![]() Objekte werden automatisch gelöscht, wenn es keine Referenzen mehr auf sie gibt. (Das macht der "Garbage Collector".) Das heißt, dass du einfach die Referenz auf das Objekt aus jeder Liste und Variable entfernen musst, damit es freigegeben werden kann. (In deinem Programm sollte das Entfernen aus der Liste reichen.) mfG mpmxyz |
||
Moin Moin!
Projekte: DBPC CodeCruncher Mandelbrot-Renderer |
![]() |
Sephka |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ok und wie lautet der befehl dafür?? | ||
Mein Freund und Helfer:
Win7 Home Premium SP1 AMD Athlon II X4 645 3.1GHZ 8GB Ram 64bit |
![]() |
blackgecko |
![]() Antworten mit Zitat ![]() |
---|---|---|
BlitzMax: [AUSKLAPPEN] Tanklist.remove(T) remove ist eine Methode von TList, die als Parameter das Objekt bekommt, das du aus der Liste entfernen willst. Ganz einfach ![]() |
||
So long and thanks for all the fish.
Fedora 17 | Windows 7 || BlitzPlus | BlitzMax Rechtschreibflame GO!!! Deppenapostroph | SeidSeit | Deppenakzent | DassDas | Deppenleerzeichen | TodTot | enzigste.info - Ja, ich sammel die. |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group