Eigenständige Objektbewegung + Richtungswechsel

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

 

Aracos

Betreff: Eigenständige Objektbewegung + Richtungswechsel

BeitragMo, Mai 26, 2008 18:25
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo!

Habe folgendes Problem:
Ich versuche eine Kiste dazu zu bringen sich eigenständig zu bewegen
(is ja kein ding... y= y-1 bzw. y=y+1 damit sie sich nachoben oder nach unten bewegt)

diese kiste soll dann jedoch sobald sie ein bestimmtes objekt berührt nicht mehr von oben nach unten sondern dann nach rechts weiter bewegen.

Habs mit Imagecollide versucht... klappt auch, leider nur für die länge des objektes danach bewegt die kiste sich wieder nach unten...




Code: [AUSKLAPPEN]

Graphics 800,600,32,2
SetBuffer BackBuffer()
y = 250
x = 300
y1= 400
x1= 285
y2= 400
x2= 335
y3= 400
x3= 385
y4= 400
x4= 435
Cls
ClsColor 255,0,0

;Pic Loading;


Con1   = LoadImage ("Con1.jpg")
Con2   = LoadImage ("Con1.jpg")
Con3   = LoadImage ("Con1.jpg")
Con4   = LoadImage ("Con1.jpg")
Con5   = LoadImage ("Con1.jpg")
Kiste1 = LoadImage ("kiste.jpg")
;Schleifenbeginn

Repeat

Cls

DrawImage Con1,x1,y1
DrawImage Con2,x2,y2
DrawImage Con3,x3,y3
DrawImage Con4,x4,y4
DrawImage Con5,x5,y5
DrawImage Kiste1,x,y

; Eigenbewegung der Kiste

y= y-3

; Kollisionsabfrage


If ImagesCollide (Kiste1, x, y-25, frame1, Con1, x1, y1, frame2)   Then
x=x+1 Else y= y+1
If ImagesCollide (Kiste1, x, y-25, frame1, Con2, x2, y2, frame2)   Then
x=x+1 Else y= y+1
If ImagesCollide (Kiste1, x, y-25, frame1, Con3, x3, y3, frame2)   Then
x=x+1 Else y= y+1
If ImagesCollide (Kiste1, x, y-25, frame1, Con4, x4, y4, frame2)   Then
x=x+1 Else y= y+1
If ImagesCollide (Kiste1, x, y-25, frame1, Con5, x5, y5, frame2)   Then
x=x+1
EndIf
EndIf
EndIf
EndIf
EndIf









 
;SEITENBEGRENZUNG;

If y<0 Then
y=0
EndIf

If y>545 Then
y=545
EndIf

If x>765 Then
x=765
EndIf
 
If x<0 Then
x=0
EndIf

;SEITENBEGRENZUNG KISTE1;

If y<0 Then
y=0
EndIf

If y>580 Then
y=580
EndIf

If x>775 Then
x=775
EndIf
 
If x<0 Then
x=0
EndIf


Flip

Until KeyDown(1)


End



könnte den ganzen code bestimmt auch mit dims darstellen...aber soweit bin ich noch ned^^


gruß Aracos
Carpe Diem

Caesium

BeitragMo, Mai 26, 2008 18:39
Antworten mit Zitat
Benutzer-Profile anzeigen
wenn ich dich richtig verstehe: du könntest das ganze beispielsweise mit variablen für jede richtung verwirklichen. sobald die kiste mit dem objekt kollidiert, änderst du die richtung. die bewegung machst du von der richtungsvariable abhängig.

Code: [AUSKLAPPEN]
Const OBEN = 1
Const UNTEN = 2
Const LINKS = 3
Const RECHTS = 4

Global kiste_richtung = UNTEN

Select kiste_richtung
   Case OBEN
      y = y - 1
   Case UNTEN
      y = y + 1
   ;und so weiter ...
End Select


gruß,
caesium
Der Vorteil der Klugheit liegt darin, dass man sich dumm stellen kann. Das Gegenteil ist da schon schwieriger. Smile
  • Zuletzt bearbeitet von Caesium am Mo, Mai 26, 2008 18:41, insgesamt einmal bearbeitet
 

kevin89

Betreff: ---

BeitragDo, Mai 29, 2008 21:15
Antworten mit Zitat
Benutzer-Profile anzeigen
Du musst das ganze in die If-Anweisung bringen. Das würde dann ungefähr so aussehen:

If ImagesCollide (Kiste1, x, y-25, frame1, Con1, x1, y1, frame2) Then
x=x+1 Else y= y+1
ElseIf ImagesCollide (Kiste1, x, y-25, frame1, Con2, x2, y2, frame2) Then
x=x+1 Else y= y+1
ElseIf ImagesCollide (Kiste1, x, y-25, frame1, Con3, x3, y3, frame2) Then
x=x+1 Else y= y+1
ElseIf ImagesCollide (Kiste1, x, y-25, frame1, Con4, x4, y4, frame2) Then
x=x+1 Else y= y+1
ElseIf ImagesCollide (Kiste1, x, y-25, frame1, Con5, x5, y5, frame2) Then
x=x+1
Else [HIER KOMMT DIE EIGENTLICHE BEWEGUNG HIN]


Ansonsten empfehle ich dir statt ImagesCollide (Pixelgenaue Kollision) ImagesOverlap(Kollision durch überlappen).

mfg


kevin89
kevin89 Wink

garret

BeitragFr, Mai 30, 2008 8:55
Antworten mit Zitat
Benutzer-Profile anzeigen
Bei Kisten würde ich dann sogar RectsOverlap empfehlen, natürlich nur, wenn alle untereinander kollidierenden Objekte auch Rechtecke sind...

@ Aracos: Wenn du mehr als fünf Kisten einbauen willst, machst du es dir mit deinem jetzigen Code sehr umständlich, da du für jeden Container eigene selbstständige Variablen wie x1, x2 etc. erstellst. Dim-Felder oder auch Types fassen diese Objekte zusammen und du kannst sie dadurch leichter ansprechen und neue hinzufügen. Dann musst du in deinem jetzigen Code nicht fünf Mal ImagesCollide verwenden. Also mach dir die Mühe und guck dir das an, Dim-Felder sind nicht wirklich schwer zu verstehen Wink
Wenn du ein Bild mehrfach lädst, kannst du übrigens auch CopyImage verwenden.

MfG garret
>>nec aspera terrent<< (Auch Widerwärtigkeiten schrecken nicht)

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group