problem mit collision
Übersicht

BennybunnyBetreff: problem mit collision |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
hoi,
einfach die mausabfrage einen schritt vorziehen. und du solltest nie bilder in ner schleife laden, irgendwann knallts dann wegen speicherüberlauf ![]() 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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
g(i, 3) = bild ;
ist nutzlos ![]() |
||
Brillux |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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. ![]() |
||
![]() |
PSY |
![]() Antworten mit Zitat ![]() |
---|---|---|
$tankY hat Folgendes geschrieben: g(i, 3) = bild ;
ist nutzlos ![]() nicht wenn er später z.b. verschiedene pics zuweisen will ![]() wenn er dann das imagecollide mit g(i,3) abfragt funzt das sogar ![]() 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 ![]() l8er, psy |
||
$tankY |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
PSY hat Folgendes geschrieben: $tankY hat Folgendes geschrieben:
g(i, 3) = bild ;
ist nutzlos ![]() nicht wenn er später z.b. verschiedene pics zuweisen will ![]() wenn er dann das imagecollide mit g(i,3) abfragt funzt das sogar ![]() 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 ![]() l8er, psy Du hast Recht, er übergibt bei g(i, 3) = bild (sofern bild ein vorher geladenes Bild ist ![]() |
||
Bennybunny |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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^^ |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group