Kollision mit Folgen

Übersicht BlitzMax, BlitzMax NG Beginners-Corner

Neue Antwort erstellen

Sephka

Betreff: Kollision mit Folgen

BeitragSa, Nov 27, 2010 22:41
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragSa, Nov 27, 2010 22:55
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragSa, Nov 27, 2010 23:07
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragSo, Nov 28, 2010 3:11
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragSo, Nov 28, 2010 16:31
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragSo, Nov 28, 2010 17:42
Antworten mit Zitat
Benutzer-Profile anzeigen
Kann mir keiner helfen??? Crying or Very sad
Mein Freund und Helfer:
Win7 Home Premium SP1
AMD Athlon II X4 645 3.1GHZ
8GB Ram
64bit

mpmxyz

BeitragSo, Nov 28, 2010 18:26
Antworten mit Zitat
Benutzer-Profile anzeigen
Nicht gleich so ungeduldig! Wink
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

BeitragSo, Nov 28, 2010 18:47
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragSo, Nov 28, 2010 19:03
Antworten mit Zitat
Benutzer-Profile anzeigen
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 Smile
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.

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group