ImagesOverlap

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

ToeB

Betreff: ImagesOverlap

BeitragMi, Nov 29, 2006 18:34
Antworten mit Zitat
Benutzer-Profile anzeigen
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!

Rallimen

Sieger des 30-EUR-Wettbewerbs

BeitragMi, Nov 29, 2006 18:44
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragMi, Nov 29, 2006 18:44
Antworten mit Zitat
Benutzer-Profile anzeigen
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 Shocked

ToeB

BeitragMi, Nov 29, 2006 18:53
Antworten mit Zitat
Benutzer-Profile anzeigen
Embarassed Ich glaube ihr habt das falsch verstanden... Embarassed
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

BeitragMi, Nov 29, 2006 19:13
Antworten mit Zitat
Benutzer-Profile anzeigen
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
Twitter

ToeB

BeitragMi, Nov 29, 2006 19:21
Antworten mit Zitat
Benutzer-Profile anzeigen
Embarassed wie jetzt? Kannst du mir das vielecht noma erklären? Embarassed
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

BeitragMi, Nov 29, 2006 19:42
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragMi, Nov 29, 2006 19:48
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragMi, Nov 29, 2006 19:50
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragMi, Nov 29, 2006 20:01
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragMi, Nov 29, 2006 20:08
Antworten mit Zitat
Benutzer-Profile anzeigen
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

Rallimen

Sieger des 30-EUR-Wettbewerbs

BeitragMi, Nov 29, 2006 20:49
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragMi, Nov 29, 2006 20:57
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragFr, Dez 01, 2006 17:16
Antworten mit Zitat
Benutzer-Profile anzeigen
Einfach für jeden Taler speichern, ob er schon gesammelt wurde (dim-Felder...). Very Happy
Quod est faciendum? Nescio!

ToeB

BeitragSa, Dez 02, 2006 13:08
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragSa, Dez 02, 2006 13:28
Antworten mit Zitat
Benutzer-Profile anzeigen
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...

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group