[Problem gelöst] Map Scrolling Problem?
Übersicht

bruce85Betreff: [Problem gelöst] Map Scrolling Problem? |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 ![]() |
||
bruce85 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 ![]() MFG Andreas |
||
AMD Athlon(tm) II X2 250, 8 GB DDR, MSI MSI 770-C45, GeForce GTS 250 |
bruce85 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 ![]() |
||
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
EDIT :
Du hast ein "( ) "vergessen bei der Berechnung siehe ;Kommentar BlitzBasic: [AUSKLAPPEN]
|
||
bruce85 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Genau das war der fehler den ich endeckt habe.
Danke dir aber trotzdem für den Hinweis ![]() Gruss Andreas |
||
AMD Athlon(tm) II X2 250, 8 GB DDR, MSI MSI 770-C45, GeForce GTS 250 |
![]() |
BladeRunnerModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group