problem mit collision

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

 

Bennybunny

Betreff: problem mit collision

BeitragDo, Jul 06, 2006 21:57
Antworten mit Zitat
Benutzer-Profile anzeigen
hi ich hab ein kleines problem ich will wenn ich ein bild anzeige und draufklicke das es sich an eine andere stelle bewegt. mit einem klappt es ja aber wenn ich es mit 2 oder mehr versuche klappt das nicht.

hier ist der code. bitte berichtigt meine fehler und sagt mir was ich falsch gemacht habe.

Code: [AUSKLAPPEN]

Graphics 800, 600, 32

SetBuffer BackBuffer()

bild = LoadImage("test.bmp")
pointer = LoadImage("pointer.bmp")
MaskImage pointer, 255, 0, 255
anzahl = 1
Dim g(anzahl, 3)
p = 0
HidePointer()

Repeat
   Cls
   For i = 0 To anzahl
      If g(i, 0) = 0 Then
         g(i, 0) = 1
         g(i, 1) = Rnd(0,600)
         g(i, 2) = Rnd(0, 400)
         g(i, 3) = LoadImage("test.bmp")
      EndIf
   Next
   For i = 0 To anzahl
      If g(i, 0) = 1 Then
         DrawImage bild, g(i, 1), g(i, 2)
      EndIf
   Next
   For i = 0 To anzahl
      If MouseHit(1) Then
         If ImageRectCollide(bild, g(i, 1), g(i,2), 0, MouseX(), MouseY(), 1, 1) Then
            p = p + 1
            g(i, 0) = 0
         EndIf
      EndIf
   Next
   For i = 0 To anzahl
      DrawImage pointer , MouseX(), MouseY()
   Next
   Text 0, 0, "Punkte: " + p
   Flip
Until(KeyHit(1))
End


bennybunny
 

$tankY

BeitragDo, Jul 06, 2006 22:24
Antworten mit Zitat
Benutzer-Profile anzeigen
Man kann nur eine KeyHit Abfrage pro Schleife machen!
Probiers ma so:
Code: [AUSKLAPPEN]

hit=keyhit(1)
...
If ImageRectCollide(bild, g(i, 1), g(i,2), 0, MouseX(), MouseY(), 1, 1) And hit=1 then
...
EndIf

PSY

BeitragDo, Jul 06, 2006 22:56
Antworten mit Zitat
Benutzer-Profile anzeigen
hoi,

einfach die mausabfrage einen schritt vorziehen. und du solltest nie bilder in ner schleife laden, irgendwann knallts dann wegen speicherüberlauf Wink

Code: [AUSKLAPPEN]

Graphics 800, 600, 32

SetBuffer BackBuffer()

bild = LoadImage("test.bmp")
pointer = LoadImage("pointer.bmp")
MaskImage pointer, 255, 0, 255
anzahl = 1
Dim g(anzahl, 3)
p = 0
HidePointer()

Repeat
   Cls
   For i = 0 To anzahl
      If g(i, 0) = 0 Then
         g(i, 0) = 1
         g(i, 1) = Rnd(0,600)
         g(i, 2) = Rnd(0, 400)
         g(i, 3) = bild ; <-------- bild wird  einfach zugewiesen
      EndIf
   Next
   For i = 0 To anzahl
      If g(i, 0) = 1 Then
         DrawImage bild, g(i, 1), g(i, 2)
      EndIf
   Next
   
   If MouseHit(1) Then ; <-------- hierhin muss die mausabfrage
   
     For i = 0 To anzahl
       If ImageRectCollide(bild, g(i, 1), g(i,2), 0, MouseX(), MouseY(), 1, 1) Then
         p = p + 1
         g(i, 0) = 0
       EndIf
     Next
     
   EndIf ; <---------- und das endif wird dann natürlich verschoben
      
   For i = 0 To anzahl
      DrawImage pointer , MouseX(), MouseY()
   Next
   Text 0, 0, "Punkte: " + p
   Flip
Until(KeyHit(1))
End



l8er,
psy
 

$tankY

BeitragDo, Jul 06, 2006 23:00
Antworten mit Zitat
Benutzer-Profile anzeigen
g(i, 3) = bild ;
ist nutzlos Very Happy
 

Brillux

BeitragDo, Jul 06, 2006 23:17
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich würde es so machen

Code: [AUSKLAPPEN]


Graphics 800, 600, 32


pointer = LoadImage("pointer.bmp")
MaskImage pointer, 255, 0, 255
anzahl = 1
Dim g(anzahl, 3)
p = 0
HidePointer()

SetBuffer BackBuffer()

   For i = 0 To anzahl
     g(i, 3) = LoadImage("test.bmp")   
   Next 

SeedRnd MilliSecs()
Repeat
   Cls
   For i = 0 To anzahl
     If  g(i, 0) = 0 Then
         g(i, 0) = 1
         g(i, 1) = Rnd(0,600)
         g(i, 2) = Rnd(0, 400)
     EndIf
   Next
   For i = 0 To anzahl
      If g(i, 0) = 1 Then
         DrawImage g(i,3), g(i, 1), g(i, 2)
      EndIf
   Next
    If MouseHit(1) Then
      For i = 0 To anzahl
     
         If ImageRectCollide(g(i,3), g(i, 1), g(i,2), 0, MouseX(), MouseY(), 1, 1) Then
            p = p + 1
            g(i, 0) = 0
         EndIf
      Next
   EndIf
   
   DrawImage pointer , MouseX(), MouseY()
   Text 0, 0, "Punkte: " + p
   Flip
Until(KeyHit(1))
End



Das Bild sollte man schon vor der Hauptschleife laden,damit man es nicht jedesmal nochmal laden muss. Wink

PSY

BeitragFr, Jul 07, 2006 0:22
Antworten mit Zitat
Benutzer-Profile anzeigen
$tankY hat Folgendes geschrieben:
g(i, 3) = bild ;
ist nutzlos Very Happy


nicht wenn er später z.b. verschiedene pics zuweisen will Wink
wenn er dann das imagecollide mit g(i,3) abfragt funzt das sogar Cool


Zitat:
For i = 0 To anzahl
g(i, 3) = LoadImage("test.bmp")
Next

ist unnötig, weils immer dasselbe pic ist. einmal zuweisen is einfacher Wink


l8er,
psy
 

$tankY

BeitragFr, Jul 07, 2006 9:20
Antworten mit Zitat
Benutzer-Profile anzeigen
PSY hat Folgendes geschrieben:
$tankY hat Folgendes geschrieben:
g(i, 3) = bild ;
ist nutzlos Very Happy


nicht wenn er später z.b. verschiedene pics zuweisen will Wink
wenn er dann das imagecollide mit g(i,3) abfragt funzt das sogar Cool


Zitat:
For i = 0 To anzahl
g(i, 3) = LoadImage("test.bmp")
Next

ist unnötig, weils immer dasselbe pic ist. einmal zuweisen is einfacher Wink


l8er,
psy

Du hast Recht, er übergibt bei g(i, 3) = bild (sofern bild ein vorher geladenes Bild ist Very Happy ) den Handle weiter -> kein unnötiger Speicher wird benutzt.
 

Bennybunny

BeitragFr, Jul 07, 2006 18:02
Antworten mit Zitat
Benutzer-Profile anzeigen
g(i, 3) = bild ;
ist nutzlos Very Happy

stimmt schon das hatte ich wohl übersehen. da hatte ich wohl vergessen etwas rückgängig zu machen^^

danke für die posts^^

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group