ImagesOverlap
Übersicht

![]() |
ToeBBetreff: ImagesOverlap |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich hab folgendes prog. gerschrieben:
Code: [AUSKLAPPEN] Graphics 1140,800 , 0, 2 Smily = CreateImage(25, 25) SetBuffer ImageBuffer(Smily) Color 255,0,0 Oval 0,0,25,25 Color 50,20,255 Oval 5,10,5,5 Oval 15,10,5,5 SetBuffer BackBuffer() Repeat Tex = LoadFont("Arial",30,1,0,1) If KeyDown(200) Then y = y - 10 If KeyDown(208) Then y = y + 10 If KeyDown(203) Then x = x - 10 If KeyDown(205) Then x = x + 10 If x <= 1 Then x = 1 If y <= 1 Then y = 1 If x >= 1115 Then x = 1115 If y >= 775 Then y = 775 DrawImage Smily,x,y DrawImage Smily,200,200 If ImagesOverlap(Smily,x,y,Smily,200,200)Then ??? If ImagesOverlap(Smily,x,y,Smily,200,200)Then ??? Flip Cls Until KeyHit(1) End Wie mache ich das das wenn Overlap da is, das man dann nicht weiter den "Smily" bewegen kann.Sprich : KOLISION. |
||
Religiöse Kriege sind Streitigkeiten erwachsener Männer darum, wer den besten imaginären Freund hat.
Race-Project - Das Rennspiel der etwas anderen Art SimpleUDP3.0 - Neuste Version der Netzwerk-Bibliothek Vielen Dank an dieser Stelle nochmal an Pummelie, welcher mir einen Teil seines VServers für das Betreiben meines Masterservers zur verfügung stellt! |
![]() |
RallimenSieger des 30-EUR-Wettbewerbs |
![]() Antworten mit Zitat ![]() |
---|---|---|
Da gibt es viele Möglichkeiten,
die einfachste ist es die Tastenabfrage nur auszuführen solange keine Kolli stattfindet Also Code: [AUSKLAPPEN] If ImagesOverlap(Smily,x,y,Smily,200,200) = 0 Then Tastenabfrage
;oder If not ImagesOverlap(Smily,x,y,Smily,200,200) Then Tastenabfrage Code: [AUSKLAPPEN] Repeat
Tex = LoadFont("Arial",30,1,0,1) ; If ImagesOverlap(Smily,x,y,Smily,200,200) = 0 Then If KeyDown(200) Then y = y - 10 If KeyDown(208) Then y = y + 10 If KeyDown(203) Then x = x - 10 If KeyDown(205) Then x = x + 10 If x <= 1 Then x = 1 If y <= 1 Then y = 1 If x >= 1115 Then x = 1115 If y >= 775 Then y = 775 End If ; DrawImage Smily,x,y DrawImage Smily,200,200 Flip Cls Until KeyHit(1) End |
||
[BB2D | BB3D | BB+]
|
atom-dragon |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Code: [AUSKLAPPEN] Graphics 1024,768 , 0, 2
Smily = CreateImage(25, 25) SetBuffer ImageBuffer(Smily) Color 255,0,0 Oval 0,0,25,25 Color 50,20,255 Oval 5,10,5,5 Oval 15,10,5,5 Local faa = 0 SetBuffer BackBuffer() Repeat Tex = LoadFont("Arial",30,1,0,1) If faa = 0 Then If KeyDown(200) Then y = y - 10 If KeyDown(208) Then y = y + 10 If KeyDown(203) Then x = x - 10 If KeyDown(205) Then x = x + 10 If x <= 1 Then x = 1 If y <= 1 Then y = 1 If x >= 1115 Then x = 1115 If y >= 775 Then y = 775 EndIf DrawImage Smily,x,y DrawImage Smily,200,200 If ImagesOverlap(Smily,x,y,Smily,200,200)Then faa = 1 If ImagesOverlap(Smily,x,y,Smily,200,200)Then faa = 1 If KeyDown(57) Then faa = 0 y = 0 x = 0 EndIf Flip Cls Until KeyHit(1) End Wenn man Leeeeeeertaste drükt wird alles resetet ![]() |
||
![]() |
ToeB |
![]() Antworten mit Zitat ![]() |
---|---|---|
![]() ![]() Ich meinte das wenn Smily Smily berührt das man ihn trotzdem noch bewegen kann(den Smily), aber nicht das er über den anderen Smily "Rüberfährt"... |
||
Religiöse Kriege sind Streitigkeiten erwachsener Männer darum, wer den besten imaginären Freund hat.
Race-Project - Das Rennspiel der etwas anderen Art SimpleUDP3.0 - Neuste Version der Netzwerk-Bibliothek Vielen Dank an dieser Stelle nochmal an Pummelie, welcher mir einen Teil seines VServers für das Betreiben meines Masterservers zur verfügung stellt! |
![]() |
skey-z |
![]() Antworten mit Zitat ![]() |
---|---|---|
letzte position (old_x, old_y) als variable speichern und wenn eine Kollision stattfindet einfach auf die gespeicherten Koordinaten zurücksetzen | ||
Awards:
Coffee's Monatswettbewerb Feb. 08: 1. Platz BAC#57: 2. Platz |
![]() |
ToeB |
![]() Antworten mit Zitat ![]() |
---|---|---|
![]() ![]() |
||
Religiöse Kriege sind Streitigkeiten erwachsener Männer darum, wer den besten imaginären Freund hat.
Race-Project - Das Rennspiel der etwas anderen Art SimpleUDP3.0 - Neuste Version der Netzwerk-Bibliothek Vielen Dank an dieser Stelle nochmal an Pummelie, welcher mir einen Teil seines VServers für das Betreiben meines Masterservers zur verfügung stellt! |
Lion |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
du erstellst eine Weitere Variable in der die Koordinaten gespeichert werden , wenn du mit dem teil kollidierst wird die alte position gespeichert und das kollidierende objekt an die vorherige position gesetzt... verstanden? | ||
Intel Core 2 Quad 4x2.66 ghz - 4gb ddr2 - nvidia GeForce GTX660 2gb
Intel Atom 1x1.83 ghz - 2gb ddr2 - intel GMA 3150 256mb AMD A10-5750M 4x2.5 ghz - 8 gb ddr4 - AMD R9 M290x |
![]() |
ToeB |
![]() Antworten mit Zitat ![]() |
---|---|---|
ja, aber wie ? | ||
Religiöse Kriege sind Streitigkeiten erwachsener Männer darum, wer den besten imaginären Freund hat.
Race-Project - Das Rennspiel der etwas anderen Art SimpleUDP3.0 - Neuste Version der Netzwerk-Bibliothek Vielen Dank an dieser Stelle nochmal an Pummelie, welcher mir einen Teil seines VServers für das Betreiben meines Masterservers zur verfügung stellt! |
![]() |
Hagbard |
![]() Antworten mit Zitat ![]() |
---|---|---|
Solange dein Smilie nicht gestört wird, speicherst du die Koordinaten einfach in einer Variable.
Wenn du also kollidierst, hast du nicht die aktuellen sondern die des Schrittes davor und kannst deinen Smilie dahin zurücksetzen. |
||
![]() |
ToeB |
![]() Antworten mit Zitat ![]() |
---|---|---|
du meinst :
Code: [AUSKLAPPEN] LetztePositionX = PosX LetztePositiony = Posy ? |
||
Religiöse Kriege sind Streitigkeiten erwachsener Männer darum, wer den besten imaginären Freund hat.
Race-Project - Das Rennspiel der etwas anderen Art SimpleUDP3.0 - Neuste Version der Netzwerk-Bibliothek Vielen Dank an dieser Stelle nochmal an Pummelie, welcher mir einen Teil seines VServers für das Betreiben meines Masterservers zur verfügung stellt! |
Lion |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
so ungefähr... Allerdings wirst du so in der schleife nicht durchkommen , denn wenn du das so machst ist LetztePosition immer die aktuelle ... LetztePosition würde ich nur bei einem "event" aktualisieren wie z.B. wenn er in die nähe des zu collidierenden objekts kommt z.B. :
Code: [AUSKLAPPEN] abstand= Sqr((Pos_x - blabla_x)^2 + (Pos_x - blabla_x)^2)
If abstand > 10 then LetztePosition_x = PosX uswusw... Bei meinem Beispiel wird aber das gleiche Problem auftauchen , musst also irgendwas anderes nehmen... mfg[/code] |
||
Intel Core 2 Quad 4x2.66 ghz - 4gb ddr2 - nvidia GeForce GTX660 2gb
Intel Atom 1x1.83 ghz - 2gb ddr2 - intel GMA 3150 256mb AMD A10-5750M 4x2.5 ghz - 8 gb ddr4 - AMD R9 M290x |
![]() |
RallimenSieger des 30-EUR-Wettbewerbs |
![]() Antworten mit Zitat ![]() |
---|---|---|
Das nur einmal laden am Anfang hinter Graphics laden, da sonst dein Speicher schnell voll ist
Code: [AUSKLAPPEN] Tex = LoadFont ("Arial",30,1,0,1)
das mit dem zurücksetzten würde ich in deinem Fall so lösen! Code: [AUSKLAPPEN] Repeat
oldX = x oldY = y If KeyDown (200) Then y = y - 10 If KeyDown (208) Then y = y + 10 If KeyDown (203) Then x = x - 10 If KeyDown (205) Then x = x + 10 If x <= 1 Then x = 1 If y <= 1 Then y = 1 If x >= 1115 Then x = 1115 If y >= 775 Then y = 775 If ImagesOverlap (Smily,x,y,Smily,200,200) Then x= oldX y= oldY EndIf DrawImage Smily,x,y DrawImage Smily,200,200 Flip Cls Until KeyHit (1) |
||
[BB2D | BB3D | BB+]
|
![]() |
ToeB |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hey danke !
Nur ich möchte dazu "Taler" malen, die man einsammenl kann... Code: [AUSKLAPPEN] Taler = CreateImage(15,15) SetBuffer ImageBuffer(Taler) Color 200,200,200 Oval 0,0,15,15 so...jetz will ich das wenn man einmal darüber "fährt" das da dann ein Schwarzer Taler drübergemalt wird: Code: [AUSKLAPPEN] Black Taler = usw... Color 0,0,0 Oval 0,0,15,15 wenn ich jetzt eine kolision schreibe, dann wir zwar schwarz darüber gemalt Code: [AUSKLAPPEN] DrawImage Taler,100,100 DrawImage Smily, x, y If ImagesOverlap(Smily,x,y,Taler,100,100) then DrawImage BlackTaler Aber wenn ich über dem Taler mich weg bewege, dann is er wieder nomal. wie kann ich das ändern? |
||
![]() |
Nescio |
![]() Antworten mit Zitat ![]() |
---|---|---|
Einfach für jeden Taler speichern, ob er schon gesammelt wurde (dim-Felder...). ![]() |
||
Quod est faciendum? Nescio! |
![]() |
ToeB |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ok....jetzt hab ich aba noch'n anderes Problem...
Ich will eine Map zufällig erstellen lassen und dafür eine Colisin schreiben Ich dachte da an so einen Code: [AUSKLAPPEN] SeedRnd Millisecs() MapRndX = Rnd(0,1000) MapRndY = Rnd(0,1000) DrawImage Map,MapRndX,MapRndY ... ;code für Tastatursteuerung usw... ... If ImageOverlap(Smily,x,y,Map,MapRndX,MapRndY) Then x = OldX y = OldY EndIf aba das klappt nich... wie kann ich das machen, das der z.b. zufällig ein Labyrint erstellt? |
||
Religiöse Kriege sind Streitigkeiten erwachsener Männer darum, wer den besten imaginären Freund hat.
Race-Project - Das Rennspiel der etwas anderen Art SimpleUDP3.0 - Neuste Version der Netzwerk-Bibliothek Vielen Dank an dieser Stelle nochmal an Pummelie, welcher mir einen Teil seines VServers für das Betreiben meines Masterservers zur verfügung stellt! |
![]() |
Hagbard |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ein Ansatz für ein Labyrinth wäre, dass du es aus Blöcken zusammensetzt.
zB so: _ _ _ | | |_ _ _| In einer Textdatei könntest du für alle Blöcke, mit denen er zusammenstoßen soll eine 1 schreiben. Durchgänge wären dann evtl. mit 2 zu kennzeichnen. 0 ist freie Spielfläche am obigen Beispiel orientiert 1111 1002 1001 1111 Das musst du dann natürlich wieder einlesen und je nach Art des Blocks grafisch umsetzen. Außerdem gehst du durch wie die Spielfigur kollidieren soll... |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group