Problem mit laufen meines Players

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

 

Colius

Betreff: Problem mit laufen meines Players

BeitragDo, Jan 26, 2006 15:41
Antworten mit Zitat
Benutzer-Profile anzeigen
So nun weil ich ein kleines problem habe das sich etwas noobie anhört schreibe ichs mal hier rein Smile
so also meine frage ist wie kann ich meinen spieler Rechtslaufen lassen vom kartenanfang ( Karte ist 2500 x 480 groß ) und gleichzeitig den bildschirm rechts mitlaufen lassen ?
Ich habe es mal so versucht aber irgentwie geht es nicht denn der spieler ist zu schnell und der bildschirm zu langsam und es verwischt den hintergrund

Zitat:

Graphics 800,600,16,1
SetBuffer BackBuffer()
figur = LoadImage("figur.bmp")
MaskImage figur,255,255,255
hintergrund = LoadImage("wald.bmp")

Repeat
DrawImage hintergrund,wand,0
;Tastatur Abfragen
If KeyDown(205) Then laufen = laufen + 2 wand = wand - 3
If KeyDown(203) Then laufen = laufen - 2 wand = wand + 3
DrawImage figur,laufen,y
Flip
Until KeyHit(1)

Hubsi

BeitragDo, Jan 26, 2006 15:45
Antworten mit Zitat
Benutzer-Profile anzeigen
Code: [AUSKLAPPEN]
Repeat
Cls ; Cls wirkt oft Wunder :D
DrawImage hintergrund,wand,0
Code: [AUSKLAPPEN]
laufen = laufen + 2:wand = wand - 3 ; mehrere Anweisungen in einer Zeile mit : trennen
hectic hat Dir in deinem anderen Thread ein recht schönes Beispiel zum Verständniss der Basics geschrieben Wink
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn...

dominik

BeitragDo, Jan 26, 2006 15:49
Antworten mit Zitat
Benutzer-Profile anzeigen
was isn das für ne abfrage????
Code: [AUSKLAPPEN]
If KeyDown(205) Then laufen = laufen + 2 wand = wand - 3

das muss wenn schon
Code: [AUSKLAPPEN]
If KeyDown(205) Then
  laufen = laufen + 2
  wand = wand - 3
endif

heißen.

und das der hintergrund verwischt hat nichts mit der geschwindigkeit zu tun. sondern du solltest einfach mal deinen screen löschen!
sonst bringt auch flip nix.
BB+ 1.41|Sempron 2.8|geforce fx5200|1GB DDR|XP home SP2 / prof.
 

Colius

BeitragDo, Jan 26, 2006 15:51
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich danke dir ich habe hier weiter gemacht wo ich in Blitzbasic 2d aufgehört habe.

Edit:
Zitat:

und das der hintergrund verwischt hat nichts mit der geschwindigkeit zu tun. sondern du solltest einfach mal deinen screen löschen!
sonst bringt auch flip nix.

Gut ehm und wo soll ich den cls reinsetzen?

und wegen dem
If KeyDown(205) Then laufen = laufen + 2 wand = wand - 3
hab nur das : vergessen
so sollte es richtig sein oder?
If KeyDown(205) Then laufen = laufen + 2 : wand = wand - 3 : cls

Edit 2 :
Nein jetzt ist wenn ich dauer -> mache schwarz aber es wird gelöscht aber das prob ist der spieler ist noch immer zu schnell für den Bildschirm das der Nach rechts mit geht

Edit 3 : Confused
so also ich habe es hinbekommen das er jetzt das bild einspeichert und wiedergibt also es hängt nicht mehr jetzt nur noch das problem das der spieler zu schnell ist als der bildschirm Sad
Zitat:
Graphics 800,600,16,1 ;In den Grafikmodus schalten
SetBuffer BackBuffer() ;Backbuffer anschalten
figur = LoadImage("figur.bmp") ;Figur laden
MaskImage figur,255,255,255 ;Farbe Weiss bei der Figur als transparent definieren
hintergrund = LoadImage("wald.bmp") ;hintergrund laden

Repeat ;Schleife
Cls
DrawImage hintergrund,wand,0 ;Hintergrund zeichen

;Tastatur Abfragen
If KeyDown(205) Then laufen = laufen + 1 : wand = wand - 3


If KeyDown(203) Then laufen = laufen - 1 : wand = wand + 3
If KeyDown(oben) Then y = y - 3
If KeyDown(unten) Then y = y + 3
DrawImage figur,laufen,357 ;Figur zeichnnen
Flip ;Alles in den BackBuffer zeichnen
Until KeyHit(1) ;Schleife Endet, sobald man esc drückt


Edit 4:
Und noch eine frage wie kann ich eine blockierung reinmachen dass mein spieler nicht Links oder rechts rausleuft sondern links nicht mehr weiter kommt und rechts in die nechste map kommt? das mit dem > < = hab ich net ganz kapiert

hectic

Sieger des IS Talentwettbewerb 2006

BeitragFr, Jan 27, 2006 2:13
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo Colius, es gibt für dein Problem sicherlich tausende Lösungen... Ich werde versuchen mal ein paar Beispiele zu nennen.

1) Setze den Spieler in die Mitte des Bildschirmes und bewege nur den Hintergrund. Viele Spiele sind so aufgebaut. Man steuert also sein Männchen indem sich nur der Hintergrund bewegt. Der 'Kamerafokus' bleibt also auf dem Männchen.

2) Bewege das Männchen normal über den Bildschirm bis es auf eine unsichtbare 'Mauer' trifft und von da an bewege nur den Hintergrund. Für viele ist dieses angenehmer zu spielen. Will aber mal auch die Nachteile erklären. Wenn der Spieler beispielsweise nach rechts läuft, dann will er ja auch sehen was sich so weiter rechts befindet. Das kann er aber nicht so gut, da die Kamera 'nachläuft'.

3) Bewege dein Männchen normal über den Bildschirm und lasse den Hintergrund zum Spieler 'nachsliden' (geht ganz einfach mit Float-Variablen). Diese Lösung ist eine Mischung aus den beiden oberen Beispielen. Je nachdem was du machen willst hat jedes seine Vor/Nach -teile.

Die erste Lösung ist am einfachsten zu programmieren, dann die letzte und dann die zweite... Würde ich sagen. Wobei nichts von den dreien wirklich schwer sein wird.

[EDIT] Damit du jetzt nicht tagelang dir überlegen tust, was nun am besten sein möge und wie man es anstellen soll, hier mal ein kleiner Demonstrationsbeitrag von mir wie was aussehen kann.

1)Code: [AUSKLAPPEN]
Graphics 400,400,0,2
SetBuffer BackBuffer()

xp%=100
yp%=100


;Hauptschleife
While Not KeyHit(1)

 ;Tastaturabfrage
 If KeyDown(203) xp=xp-1
 If KeyDown(205) xp=xp+1
 If KeyDown(200) yp=yp-1
 If KeyDown(208) yp=yp+1

 ;Hintergrund
 Color 120,120,120
 For q=0 To 400 Step 20
  Rect 0,q-yp Mod 20,400,1
  Rect q-xp Mod 20,0,1,400
 Next

 ;Spieler
 Color 240,240,240
 Rect 198,198,4,4,1

 Flip
 Cls
Wend
End

2)Code: [AUSKLAPPEN]
Graphics 400,400,0,2
SetBuffer BackBuffer()

xp%=200
yp%=200
xm%=0
ym%=0


;Hauptschleife
While Not KeyHit(1)

 ;Tastaturabfrage
 If KeyDown(203) xp=xp-1:If xp<100 Then xp=100:xm=xm-1
 If KeyDown(205) xp=xp+1:If xp>300 Then xp=300:xm=xm+1
 If KeyDown(200) yp=yp-1:If yp<100 Then yp=100:ym=ym-1
 If KeyDown(208) yp=yp+1:If yp>300 Then yp=300:ym=ym+1

 ;Hintergrund
 Color 120,120,120
 For q=0 To 400 Step 20
  Rect 0,q-ym Mod 20,400,1
  Rect q-xm Mod 20,0,1,400
 Next

 ;Spieler
 Color 240,240,240
 Rect xp,yp,4,4,1

 Flip
 Cls
Wend
End

3)Code: [AUSKLAPPEN]
Graphics 400,400,0,2
SetBuffer BackBuffer()

xp#=0
yp#=0
xm#=0
ym#=0


;Hauptschleife
While Not KeyHit(1)

 ;Tastaturabfrage
 If KeyDown(203) xp=xp-1
 If KeyDown(205) xp=xp+1
 If KeyDown(200) yp=yp-1
 If KeyDown(208) yp=yp+1

 xm=xm-(xm-xp)/50
 ym=ym-(ym-yp)/50

 ;Hintergrund
 Color 120,120,120
 For q=0 To 400 Step 20
  Rect 0,q-ym Mod 20,400,1
  Rect q-xm Mod 20,0,1,400
 Next

 ;Spieler
 Color 240,240,240
 Rect 198+xp-xm,198+yp-ym,4,4,1

 Flip
 Cls
Wend
End
 

Colius

BeitragSa, Jan 28, 2006 14:02
Antworten mit Zitat
Benutzer-Profile anzeigen
danke für die codes hat mir etwas weiter geholfen nur eins muss ich noch
fragen wie kann man so unsichtbare wände machen dass etwas passiert wie zb

man kommt ans ende der karte und dort soll die nechste karte kommen
Und
wie kann ich das machen dass der nicht ganz rüber geht das man das ende der karte schwarz sieht?

@ Hectic kanst du mir bitte erklären was diese einen paar zeilen bedeuten

Zitat:


xp%=100
yp%=100

For q=0 To 400 Step 20
Rect 0,q-yp Mod 20,400,1
Rect q-xp Mod 20,0,1,400
Rolling Eyes

Edit :

Hectic hast du eigentlich icq oder so? den so eine hilfe könnte ich gebrauchen für weitere fragen wäre sehr hilfreich Mr. Green

hectic

Sieger des IS Talentwettbewerb 2006

BeitragSa, Jan 28, 2006 15:56
Antworten mit Zitat
Benutzer-Profile anzeigen
xp und yp nenne ich immer bei allen meinen Programmen als X-Position (xp) und Y-Position (yp). Das % bedeutet das es sich hier um eine Integer-Variable handelt. Also Ganzzahlen 0, 1, 2, 3, keine Brüche wie 0.12,... Integer ist wesentlich schneller aber auch nicht überall anzuwenden.

Die nächsten Zeilen zeichnen die 'Map' in Form von Linien. Hätte auch Line nehmen können, aber da es sich hier nur um vertikale und horizontale Linien handelt nimmt man lieber Rect da dieses wesentlich schneller ist. Um eine 'endlose' Map darzustellen kann man auch einen Bereich von sagen wir mal -10000 und +10000 in jeweils x und y zeichnen und davon ausgehen das der Spieler niemals stundenlang ein eine Richtung gehen wird, bis er das Ende erreicht hat. Die Methode währe allerdings recht langsam, da ja soviel berechnet wird. Aushelfen kann man sich in einem solchen Fall mit Mod. Mod macht nichts anderes als den Restbetrag eines Bruches wieder zu geben. Also 10/3 = 3.333333333 usw. als Float oder 10/3=3 als Integer und Rest 1. Mod würde hier also 1 zurrück geben. Mit dieser Funktion kann man so Sachen wie die schöne Endlos-Map hier machen, aber auch für Fliessend bewegende Tilemaps zu gebrauchen...

Edit: Seid ihr auch alle am durchmachen? Habe jetzt 17 Stunden nonstop (ausser zur Nahrungsaufnahme und Entsorgung) gecodet. Will mein Spiel jetzt vorran treiben...
 

$tankY

BeitragSa, Jan 28, 2006 16:06
Antworten mit Zitat
Benutzer-Profile anzeigen
@hectic
thx für das 3. bsp, sieht echt fett aus, an was codest du gerade?

edit: habs umgeschrieben, sodass man es mit einem hintergrundbild benutzen kann:
Code: [AUSKLAPPEN]

Background$="bg.bmp"
bg=LoadImage(Background$)
Graphics 400,400,0,2
SetBuffer BackBuffer()

xp#=0
yp#=0
xm#=0
ym#=0


;Hauptschleife
While Not KeyHit(1)

 ;Tastaturabfrage
 If KeyDown(203) xp=xp-1
 If KeyDown(205) xp=xp+1
 If KeyDown(200) yp=yp-1
 If KeyDown(208) yp=yp+1

 xm=xm-(xm-xp)/50
 ym=ym-(ym-yp)/50

 TileImage bg,-xm,-ym


 ;Spieler
 Color 240,240,240
 Rect 198+xp-xm,198+yp-ym,4,4,1

 Flip
 Cls
Wend
End
 

Colius

BeitragSa, Jan 28, 2006 16:44
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich habs gefühl da funzt was nicht Oo habs mal spasseshalber ausgetestet nur wenn ich
Background$="bg.bmp"
bg=LoadImage(Background$)
Da das bild bg umendere in nen anderen namen gehts net


ps:
hm irgentwie ist mir das forum zu langsam ^^ hat einer von euch 2n icq ?Razz

hectic

Sieger des IS Talentwettbewerb 2006

BeitragSa, Jan 28, 2006 18:51
Antworten mit Zitat
Benutzer-Profile anzeigen
$tankY hat Folgendes geschrieben:
@hectic
thx für das 3. bsp, sieht echt fett aus, an was codest du gerade?


Bitteschön, dafür ist doch das Forum ja da! Freud mich denoch das man mal ein Feedback bekommt. Sonst macht es ja garkeinen Spaß mehr für andere sich hinzusetzen und sich um ein Problem anderer Leute zu kümmern. Bin jetzt 20 Stunden am coden non stop... Habe keine Drogen genommen, bin einfach nicht müde. Möchte mein Programm vorran treiben... Schreibe grad ein Spiel. Ein Klon eines uraltem Spieles 'Thrust' hier aber mit 3D-Unterstützung auf 2D-Ebene. Mit super-geilem-Schubflammenausstoss.
Editor um Triangles setzen zu könnenetc , fertig. Spielsteuerung, fertig. Intro, ferig. Nur das Menü dauert uuunnneeeennndlich laaange. Keine Ahnung warum? Weil man an 1000 Kleinigkeiten denken muß. Paar Grafiken noch.
 

$tankY

BeitragMo, Jan 30, 2006 15:17
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich kenn das, hab schon öfter so nen flash gehabt, hab das ganze wochenende durchgeprogt, nahrungsaufnahme sehr selten^^

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group