Kollisionen mit dem Bildschirmrand

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

 

ekk1998

Betreff: Kollisionen mit dem Bildschirmrand

BeitragDo, Sep 08, 2011 19:35
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo bin neu hier und mein erster Beitrag Wink
Also... ich habe ein Bild (Hintergrund) und eine Person, wenn die Person den Bildschirmrand berühren sollte soll ein neues Bild (neuer Hintergrund) geladen werden. Wie mach ich das Question

MFG ekk1998
  • Zuletzt bearbeitet von ekk1998 am Fr, Sep 09, 2011 17:13, insgesamt einmal bearbeitet

ZEVS

BeitragDo, Sep 08, 2011 19:39
Antworten mit Zitat
Benutzer-Profile anzeigen
Hintergrundbilder vorher laden, und bei
Code: [AUSKLAPPEN]
personX+personWidth >= sizeX

einfach das nächste Bild in die Variable "aktuelles Bild" setzen.
Wenn du nicht alles am Anfang lädst, solltest du geladene Bilder irgendwie speichern, damit sie nicht 10x geladen werden.

ZEVS
 

ekk1998

Betreff: Ich verstehe Bahnhof

BeitragFr, Sep 09, 2011 17:15
Antworten mit Zitat
Benutzer-Profile anzeigen
ZEVS hat Folgendes geschrieben:
Hintergrundbilder vorher laden, und bei
Code: [AUSKLAPPEN]
personX+personWidth >= sizeX

einfach das nächste Bild in die Variable "aktuelles Bild" setzen.
Wenn du nicht alles am Anfang lädst, solltest du geladene Bilder irgendwie speichern, damit sie nicht 10x geladen werden.

ZEVS
Ich verstehe Bahnhof Wink

Midimaster

BeitragFr, Sep 09, 2011 17:18
Antworten mit Zitat
Benutzer-Profile anzeigen
du wirst wohl oder übel etwas von Deinem Code hier reinstellen müssen, wenn du möchtest, dass die Hilfe konkreter werden soll!

du schreibst z.b :

Zitat:
...ich habe eine Person...


Ein User, der die Maus in der Hand hat? Oder ein Männchen, dass im Spiel den Rand erreicht?


Und wir wissen ja noch gar nicht, ob Dir das Laden eines ersten Hintergrundbildes schon gelungen ist? Oder ob sich das Männchen schon Richtung Rand bewegen kann?
Gewinner des BCC #53 mit "Gitarrist vs Fussballer" http://www.midimaster.de/downl...ssball.exe
 

ekk1998

Betreff: Mein Code

BeitragFr, Sep 09, 2011 17:40
Antworten mit Zitat
Benutzer-Profile anzeigen
Code: [AUSKLAPPEN]
Graphics 800, 600,16,1
SetBuffer BackBuffer()


;Bilder laden
Global Per =      LoadImage("G\Per.bmp")
Global WL  =      LoadImage("G\WL.png")

;----Bewegungsglobals----
Global x = 710
Global y = 340
Global speed = 4

; Hauptschleife
Repeat
Cls

MaskImage Per, 0, 0, 255

bilderzeichnen
bewegen


Flip
Until KeyHit(57)
End

;-------------Bilder ausgeben-----------------
Function bilderzeichnen ()

;Bilder Ausgeben
DrawImage WL, 1, 1
DrawImage Per,x-2,y-2

End Function

;---------------------Bewegen------------------------------
Function bewegen()

If KeyDown(200) Then y = y         ; hoch
If KeyDown(208) Then y = y         ; runter
If KeyDown(203) Then x = x - speed ; links
If KeyDown(205) Then x = x + speed ; rechts
End Function
;--------------------------------------------

Midimaster

BeitragFr, Sep 09, 2011 17:48
Antworten mit Zitat
Benutzer-Profile anzeigen
ahh!!

BlitzBasic: [AUSKLAPPEN]

Repeat
....
;Beispiel für oberen und unteren Rand:
If (y<0) Or (y>590)
Print "Hier soll geladen werden"
WL = LoadImage("G\WasAnderes.png")
y= 300 ; siehe unten
EndIf


Allerdings ist dies mit Vorsicht zu geniessen. Die Person sollte danach vom Bildschirmrand weggestellt werden, weil ja sonst gleich wieder geladen wird.

Es gäbe natürich aus den Trick, dass du das zweite Bild gleich zu Anfang lädst und dann imm Moment des Randberührens nur noch umswitcht:

BlitzBasic: [AUSKLAPPEN]

WL2 = LoadImage("G\WasAnderes.png")
...
Repeat
....
;Beispiel für oberen und unteren Rand:
If (y<0) Or (y>590)
Print "Hier soll geladen werden"
WL = WL2
y= 300 ; siehe unten
EndIf
Gewinner des BCC #53 mit "Gitarrist vs Fussballer" http://www.midimaster.de/downl...ssball.exe

Xeres

Moderator

BeitragFr, Sep 09, 2011 17:53
Antworten mit Zitat
Benutzer-Profile anzeigen
Bitte um Himmels Willen nichts in der Hauptschleife laden! Jedenfalls nicht, so lange du nicht 100%ig sicher bist, das die gewünschte Aktion genau 1x ausgeführt wird.
Variablen zuweisen ist zu bevorzugen, da kann nichts schief gehen.
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)
 

ekk1998

Betreff: Und nun ?

BeitragSa, Okt 22, 2011 14:02
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich hab jetzt :
Code: [AUSKLAPPEN]
Graphics 800, 600,16,1
SetBuffer BackBuffer()


;Bilder laden
Global Per   =     LoadImage ("G\Per.bmp")
Global WL    =     LoadImage ("G\WL.png")
Global WL2   =     LoadImage ("G\WL2.png")

;----Bewegungsglobals--------------------------------------
Global x = 710
Global y = 330
Global speed = 4

; Hauptschleife
Repeat
Cls

MaskImage Per, 0, 0, 255

bilderzeichnen
bewegen


Flip
Until KeyHit(57)
End

;-------------Bilder ausgeben------------------------------
Function bilderzeichnen ()

;Bilder Ausgeben

DrawImage WL, 1, 1 
DrawImage Per,x-2,y-2

If (y<0) Or (x>750) 
Print "Hier soll geladen werden"   
WL = WL2   
y= 300 ; siehe unten
 
EndIf
End Function

;---------------------Bewegen------------------------------
Function bewegen ()

If KeyDown(200) Then y = y          ; hoch
If KeyDown(208) Then y = y          ; runter
If KeyDown(203) Then x = x - speed  ; links
If KeyDown(205) Then x = x + speed  ; rechts

End Function
;-------------------------------------------------------

Im Bild WL2 sind jetzt noch paar Fehler (Der Text, Person läuft in der Luft, Person erscheint rechts statt links) wie kann ich entgegenwirken Question

ZEVS

BeitragSa, Okt 22, 2011 14:15
Antworten mit Zitat
Benutzer-Profile anzeigen
Zitat:
Der Text...
Welcher Text? Meinst du die Ausgabe mit Print? Dann nimm lieber Text.
Zitat:
Person läuft in der Luft
Ich sehe nichts, was sie davon abhalten sollte. Für den Anfang reicht es wohl, wenn du bei y > 0 einfach y = y-1 ausführst. Vektoren wären natürlich schöner und schwieriger.
Zitat:
Person erscheint rechts statt links
Wenn die Fensterbreite 800px ist und du als Anfangs-x-wert 710 einstellst, soll mich das nicht wundern. Probiere doch BlitzBasic: [AUSKLAPPEN]
Global x = 10


Ansonsten:
Zitat:
BlitzBasic: [AUSKLAPPEN]
MaskImage Per, 0, 0, 255   ;im mainloop

Bilder maskiert man einmal, danach bleiben sie maskiert. Mach das doch bitte hier:BlitzBasic: [AUSKLAPPEN]
Global Per   =     LoadImage ("G\Per.bmp")
;hier


Zitat:
BlitzBasic: [AUSKLAPPEN]
Function bewegen ()

If KeyDown(200) Then y = y ; hoch
If KeyDown(208) Then y = y ; runter
Das ist wahnsinnig sinnvoll, eine Variable mit sich selbst gleichsetzen.

Zitat:
BlitzBasic: [AUSKLAPPEN]

If (y<0) Or (x>750)
Print "Hier soll geladen werden"
WL = WL2
y= 300 ; siehe unten

Das WL = WL2 solltest du nur ausführen, wenn du dir 100%ig sicher bist, dass du WL nie wieder brauchst. Und selbst dann wäre FreeImage speichertechnisch angeraten. Der Kommentar "siehe unten" sagt mir garnichts, denn unter diesem Teil kommt nur noch die Steuerung.

Außerdem kann man Code einrücken und [ syntax ] statt [ code ] verwenden, das freut manche Leute, die dir helfen wollen.

ZEVS

Xeres

Moderator

BeitragSa, Okt 22, 2011 14:18
Antworten mit Zitat
Benutzer-Profile anzeigen
Der Ursprung des Koordinatensystems ist oben links. D.h. Rechts ist +x, Links -x.
- MaskImage gehört nicht in die Schleife, es reicht 1x nach dem laden.
- WL = WL2 überschreibt ein Bild, welchen Sinn macht das? Nimm eine 3 Variable, wenn du zwischen WL und WL2 wechseln willst.
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)

Midimaster

BeitragSa, Okt 22, 2011 15:22
Antworten mit Zitat
Benutzer-Profile anzeigen
und hier noch meine Tipps zum Programme entwickeln:

lass zunächst beim Graphics das ,16,1 weg. Dadurch läuft das Programm in einem Fenster und Du kannst den DEBUGGER sehen:
BlitzBasic: [AUSKLAPPEN]
Graphics 800, 600   ;,16,1



Wenn die Figur rechts rausgeht, dan soll sie sicherlich wieder links ins nächste Bild reinkommen, oder?

BlitzBasic: [AUSKLAPPEN]
If (y<0) Or (x>750) 
Print "Hier soll geladen werden"
WL = WL2
If y<0 Then y=500
If x>750 Then X=50


Wenn du möchtest, das die Figur sich auch rauf/runter bewegen kann, dann hast du vergessen, auch bei y was dazuzuzählen:
BlitzBasic: [AUSKLAPPEN]
Function bewegen ()
If KeyDown(200) Then y = y+speed ; hoch
If KeyDown(208) Then y = y-speed ; runter
Gewinner des BCC #53 mit "Gitarrist vs Fussballer" http://www.midimaster.de/downl...ssball.exe
 

ekk1998

Betreff: Danke

BeitragSa, Okt 22, 2011 15:26
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke ich hab mein Problem gelöst Very Happy

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group