[Problem gelöst] Map Scrolling Problem?

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

 

bruce85

Betreff: [Problem gelöst] Map Scrolling Problem?

BeitragFr, Nov 17, 2006 12:47
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo,
Ich habe ein problem beim Scrollen der Map, ich habe hier im Forum die Suche benutzt aber nix passendes gefunden.
Wenn ich mein Spieler nach rechts bewege und spieler_x noch kleiner wie 500 ist, dann wird der spieler nach rechts bewegt.
Und wenn spieler_x grösser wie 498 ist, dann wird es gescrollt und der spieler bleibt dann stehen wenn es gescrollt wird.
Hier mal die bewegung:

Code: [AUSKLAPPEN]
If KeyDown(205) Then
  If spieler_x < 500 Then
    If Spielfeld((spieler_x+50)/50,(spieler_y+25)/50) = 0 Then
      spieler_x=spieler_x+2
    EndIf
  EndIf
  If spieler_x > 498 Then
    If Spielfeld((scroll_x+50)/50,(spieler_y+25)/50) = 0 Then
      scroll_x=scroll_x+2
    EndIf
  EndIf
EndIf


Ich habe schon viele andere möglichkeiten probiert, aber leider ohne erfolg.
Wenn ich mein Spieler nach rechts bewege und spieler_x 498 erreicht hat, dann wird die map immer abgestoßen wenn ich weiter nach rechts drücke.

ich glaube diese zeile:

Code: [AUSKLAPPEN]
If spieler_x > 498 Then
  If Spielfeld((scroll_x+50)/50,(spieler_y+25)/50) = 0 Then
    scroll_x=scroll_x+2
  EndIf
EndIf


ist nicht korrekt, ich weiss nicht ob ich dass jetzt so richtig berechne für das scrollen.

Edit: hier zeichne ich die Map:
Code: [AUSKLAPPEN]
;Spielfeld zeichnen
For y=0 To 14
  For x=0 To 199
    DrawImage tiles2,x*50-scroll_x,y*50,Spielfeld(x,y)
  Next
Next


Vielen Dank schonmal.

MFG Andreas
AMD Athlon(tm) II X2 250, 8 GB DDR, MSI MSI 770-C45, GeForce GTS 250
  • Zuletzt bearbeitet von bruce85 am Mo, Nov 20, 2006 16:43, insgesamt 4-mal bearbeitet
 

Beatenvoy

BeitragFr, Nov 17, 2006 13:30
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi

bei einer Auflösung von 800x600 würde ich das so machen:



Nach Rechts Scrollen:

Code: [AUSKLAPPEN]
If spieler_x >500 Then
   scroll_x=scroll_x+2
....


Nach links Scrollen:

Code: [AUSKLAPPEN]
If spieler_x < 300 Then
   scroll_x=scroll_x-2
....


versuchs so mal Very Happy
 

bruce85

BeitragFr, Nov 17, 2006 13:38
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke dir, das habe ich schon so versucht.
Ich benutze eine auflösung von 1024*768.

Wenn mein Spieler jetzt nach rechts läuft und eine Mauer kommt, dann fängt die Map an zu Wackeln, also links recht links recht u.s.w.
Der läuft dann einfach nicht weiter.
Wie kann ich das verhindern?
AMD Athlon(tm) II X2 250, 8 GB DDR, MSI MSI 770-C45, GeForce GTS 250

Christoph

BeitragFr, Nov 17, 2006 14:01
Antworten mit Zitat
Benutzer-Profile anzeigen
Also ich mache das immer so:
Ich habe 2 Variablen fürs Scrollen: xback# und yback#

WENN der Spieler nicht in der Mitte steht, DANN wird xback/yback dementsprechend vergrößert/verkleinert.

Du muss allerdings beim Zeichnen xback und yback von der Landschaft abziehen, hier mal ein Beispielprogramm:
Zitat:
Const Gmx=800,Gmy=600
Const Mapxmax=2000,Mapymax=2000;Landschaftsgröße
Graphics Gmx,Gmy,32,1
SetBuffer BackBuffer()
SeedRnd MilliSecs()
Anz=50
Dim rectx(Anz),recty(Anz);Blöcke
For i=0 To Anz
rectx(i)=rand(0,Mapxmax-50)
recty(i)=rand(0,Mapymax-50)
Next

Global px=0,py=0;Spielerposition
Global xback#,yback#;Scrollvariablen
Global methode=0;Scrollmethode
Global scrhar#=10;Scrollhärte
Repeat
Cls
If KeyDown(200) Then py=py-2
If KeyDown(208) Then py=py+2
If KeyDown(203) Then px=px-2
If KeyDown(205) Then px=px+2
If px<0 Then px=0
If px>Mapxmax-20 Then px=Mapxmax-20
If py<0 Then py=0
If py>Mapymax-20 Then py=Mapymax-20
If KeyHit(28) Then methode=methode+1:if methode>2 Then methode=0
If methode=1 Then;fest
xback=(px+25)-(Gmx/2)
yback=(py+25)-(Gmy/2)
ElseIf methode=2 Then;fließend
xback=xback+((px-Gmx/2)-xback)/scrhar
yback=yback+((py-Gmy/2)-yback)/scrhar
EndIf

If xback<0 Then xback=0
If yback<0 Then yback=0
If xback>Mapxmax-Gmx Then xback=Mapxmax-Gmx
If yback>Mapymax-Gmy Then yback=Mapymax-Gmy


Color 255,255,255
For i=0 To Anz
Rect rectx(i)-xback,recty(i)-yback,50,50
Next
Color 255,0,0
Oval px-xback,py-yback,20,20
Color 255,255,0
If methode=0 Then Text 0,0,"Scrollmethode (Enter zum Ändern): aus"
If methode=1 Then Text 0,0,"Scrollmethode (Enter zum Ändern): fest"
If methode=2 Then
If KeyHit(57) Then
If scrhar=10 Then
scrhar=30
elseIf scrhar=30 Then
scrhar=100
ElseIf scrhar=100 Then
scrhar=10
EndIf
endif
Text 0,0,"Scrollmethode (Enter zum Ändern): fließend"
If scrhar=10 Then
Text 0,20,"Scrollhärte (Leertaste zum Ändern): hart"
ElseIf scrhar=30 Then
Text 0,20,"Scrollhärte (Leertaste zum Ändern): mittel"
ElseIf scrhar=100 Then
Text 0,20,"Scrollhärte (Leertaste zum Ändern): weich"
endif
endif
Flip
Until KeyDown(1)
 

bruce85

BeitragFr, Nov 17, 2006 14:18
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke dir,
bei mir is jetzt nur ein kleiner fehler drin, und zwar scrollt die map jetzt richtig, nur wenn die blöcke dann auftauchen dann läuft der einfach durch, die map wird irgendwie nicht berechnet wenn man scrollt.

ich habs mal so probiert:
Code: [AUSKLAPPEN]
If spieler_x > 499 Then
If Spielfeld((scroll_x+50)/50,(spieler_y+25)/50) = 0 Then
  scroll_x=scroll_x+2
EndIf


so geht das auch nicht, wie macht man das?

Edit: ich habs hinbekommen, so geht das:
Code: [AUSKLAPPEN]
If spieler_x > 499 Then
  If Spielfeld((spieler_x+scroll_x+50)/50,(spieler_y+25)/50) = 0 Then
    scroll_x=scroll_x+2
  EndIf
EndIf


ich habe bei der berechnung noch +scroll_x hinzufügen müssen, jetzt geht das, danke euch trotzdem für die hilfe Very Happy

MFG Andreas
AMD Athlon(tm) II X2 250, 8 GB DDR, MSI MSI 770-C45, GeForce GTS 250
 

bruce85

BeitragFr, Nov 17, 2006 16:20
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo nochmal,
wenn ich das jetzt für die linke steuerung machen möchte, dann kommt "Array index out of bounds"

Hier mal der code:

Code: [AUSKLAPPEN]
  ;Spieler nach rechts bewegen
If KeyDown(205) Then
  If Spielfeld((spieler_x+scroll_x+50)/50,(spieler_y+25)/50) = 0 Then
    If spieler_x < 500 Then
      spieler_x=spieler_x+2
    EndIf
    If spieler_x > 499 Then
      scroll_x=scroll_x+2
    EndIf
  EndIf
EndIf

;Spieler nach links bewegen
If KeyDown(203) Then
  If Spielfeld(spieler_x-scroll_x/50,(spieler_y+25)/50) = 0 Then
    If Spieler_x > 499 Then
      spieler_x=spieler_x-2
    EndIf
    If spieler_x < 500 Then
      scroll_x=scroll_x-2
    EndIf
  EndIf
EndIf


wenn ich bei der linken steuerung -scroll_x hinzufüge dann kommt dieser fehler.
Normal müsste das ja gehen, wisst ihr vieleicht wieso das nicht geht?

MFG Andreas
AMD Athlon(tm) II X2 250, 8 GB DDR, MSI MSI 770-C45, GeForce GTS 250
 

bruce85

BeitragFr, Nov 17, 2006 22:48
Antworten mit Zitat
Benutzer-Profile anzeigen
Hapt ihr keine ahnung wieso es net geht?
Diese Fehlermeldung kommt nur wenn ich nach links scrollen möchte, wisst ihr vieleicht warum?

Edit: Endlich habe ich es hinbekommen Very Happy
AMD Athlon(tm) II X2 250, 8 GB DDR, MSI MSI 770-C45, GeForce GTS 250
  • Zuletzt bearbeitet von bruce85 am Sa, Nov 18, 2006 14:21, insgesamt einmal bearbeitet
 

Beatenvoy

BeitragFr, Nov 17, 2006 23:38
Antworten mit Zitat
Benutzer-Profile anzeigen
EDIT :
Du hast ein "( ) "vergessen bei der Berechnung siehe ;Kommentar
BlitzBasic: [AUSKLAPPEN]

;Spieler nach rechts bewegen
If KeyDown(205) Then
If Spielfeld((spieler_x+scroll_x+50)/50,(spieler_y+25)/50) = 0 Then
If spieler_x < 500 Then
spieler_x=spieler_x+2
EndIf
If spieler_x > 499 Then
scroll_x=scroll_x+2
EndIf
EndIf
EndIf

;Spieler nach links bewegen
If KeyDown(203) Then
If Spielfeld((spieler_x-scroll_x)/50,(spieler_y+25)/50) = 0 Then ; Hier () vergessen, ist aber schon gefixt
If Spieler_x > 499 Then
spieler_x=spieler_x-2
EndIf
If spieler_x < 500 Then
scroll_x=scroll_x-2
EndIf
EndIf
EndIf
 

bruce85

BeitragSa, Nov 18, 2006 0:17
Antworten mit Zitat
Benutzer-Profile anzeigen
Genau das war der fehler den ich endeckt habe.
Danke dir aber trotzdem für den Hinweis Very Happy

Gruss Andreas
AMD Athlon(tm) II X2 250, 8 GB DDR, MSI MSI 770-C45, GeForce GTS 250

BladeRunner

Moderator

BeitragSa, Nov 18, 2006 7:01
Antworten mit Zitat
Benutzer-Profile anzeigen
Den Doppelpost hätte ich verziehen, da neue Info gegeben wird. Der Triple war überflüssig. Mehr drauf achten in Zukunft. Danke.
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3
Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64
B3D BMax MaxGUI

Stolzer Gewinner des BAC#48, #52 & #92

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group