Problem mit laufen meines Players
Übersicht

ColiusBetreff: Problem mit laufen meines Players |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
So nun weil ich ein kleines problem habe das sich etwas noobie anhört schreibe ichs mal hier rein ![]() 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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Code: [AUSKLAPPEN] Repeat
Code: [AUSKLAPPEN] Cls ; Cls wirkt oft Wunder :D DrawImage hintergrund,wand,0 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 ![]() |
||
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn... |
![]() |
dominik |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 : ![]() 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 ![]() 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 |
||
![]() |
hecticSieger des IS Talentwettbewerb 2006 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 ![]() Edit : Hectic hast du eigentlich icq oder so? den so eine hilfe könnte ich gebrauchen für weitere fragen wäre sehr hilfreich ![]() |
||
![]() |
hecticSieger des IS Talentwettbewerb 2006 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
@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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 ? ![]() |
||
![]() |
hecticSieger des IS Talentwettbewerb 2006 |
![]() Antworten mit Zitat ![]() |
---|---|---|
$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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ich kenn das, hab schon öfter so nen flash gehabt, hab das ganze wochenende durchgeprogt, nahrungsaufnahme sehr selten^^ | ||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group