Kleine Scrolling Frage
Übersicht

Blitzkrieg BopBetreff: Kleine Scrolling Frage |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hi!
Man, das ist mir schon peinlich .... ![]() Aber okay, ich habe ne Frage: In meinem Editor versuche ich Scrolling einzupflanzen. Klicke ich mit der Maus, werden nun aber die Tiles nicht da gemalt, wo der Cursor ist. Also ich weiß nicht, wie man das Scrollx in Verbindung mit den Mauskoordinaten richtig einbindet. Hier mal alle Schnipsel, die von Bedeutung sind: Die Mausbewegung an sich berechnen. TS = Tilesize. Code: [AUSKLAPPEN] mx# = MouseX()/ts*ts my# = MouseY()/ts*ts Dem Feld, wo der Cursor drauf ist, wird das aktuelle Tile zugewiesen: Code: [AUSKLAPPEN] If mhit map(mx#/ts,my#/ts) = ct EndIf Viell kann mir ja jemand helfen. Habe wirklich schon ne Menge probiert ![]() MFG |
||
~ Hey Ho Let's Go ~ |
getlose |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
hm, verstehe nicht was du mit dem code bezwecken willst !?
wenn du scrolling einbauen willst, solltest das so o.ä machen : Code: [AUSKLAPPEN] mx=mousex()
my=mousey() if mousedown(2) then mapx=mapx+(mx-omx) mapy=mapy+(my-omy) endif omx=mx omy=my natürlich in der hauptschleife ![]() |
||
Blitzkrieg Bop |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hm, es geht auch anders!
Aber erstmal Codeerläuterung: Code: [AUSKLAPPEN] mx# = MouseX()/ts*ts my# = MouseY()/ts*ts Der Code bewirkt, das sich die Maus nur um den Faktor TS bewegt. Code: [AUSKLAPPEN] If mhit map(mx#/ts,my#/ts) = ct EndIf Klickt man auf eine Stelle, so kriegt das Feld, über dem die Maus schwebt, den Wert des aktuellen Tiles zugewiesen. CT = Current Tile. Danke Getlose, aber ich möchte es erstmal mit der Maus so hinkriegen.ote] |
||
~ Hey Ho Let's Go ~ |
getlose |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
hmm :)
angenommen, ts=16, also Code: [AUSKLAPPEN] mx=mousex()/16*16
ist das gleiche wie Code: [AUSKLAPPEN] mx=mousex()
oder hab ich da was falsch verstanden ? abfrage, bzw. bearbeiten würde dann in etwa so funktionieren : Code: [AUSKLAPPEN] if mousedown(1) then
for x=0 to mapwidth for y=0 to mapheight if rectsoverlap (mx,my,1,1,x*ts,y*ts,ts,ts) then map(x,y)=blub endif next next endif |
||
Blitzkrieg Bop |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hi!
Zitat: oder hab ich da was falsch verstanden ? Jo! ![]() Hab schnell nen Sample gecodet, dann wirds deutlich: Code: [AUSKLAPPEN] Graphics 640,480,16,2 SetBuffer BackBuffer() Const TS = 20 Const MPX = 640/TS Const MPY = 480/TS Global mx#,my# Repeat Cls mx# = MouseX()/TS*TS my# = MouseY()/TS*TS Color 79,79,79 For i = 0 To MPX For j = 0 To MPY Rect 0,0,i*TS,j*TS,0 Next Next Color 255,255,255 Rect mx#,my#,TS,TS,1 Flip Until KeyHit(1):End Zitat: Code: [AUSKLAPPEN] if mousedown(1) then for x=0 to mapwidth for y=0 to mapheight if rectsoverlap (mx,my,1,1,x*ts,y*ts,ts,ts) then map(x,y)=blub endif next next endif Hm, an dem Code ist keinerlei Scrolling eingebaut. Es geht ja nur darum, das die gemalten Tiles dort gemalt werden, wo man hinklickt. ![]() |
||
~ Hey Ho Let's Go ~ |
getlose |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
hab auch nicht behauptet das scrolling eingebaut ist :)
naja, ist zwar nicht so meine art aber trotzdem : Code: [AUSKLAPPEN] Graphics 640,480,16,2 Global mw,mh,mapx,mapy,mx,my,omx,omy tile=LoadAnimImage ("blub.png",16,16,0,4) Dim map(0,0) createmap(20,20) SetBuffer BackBuffer() While Not KeyHit(1) Cls mx=MouseX() my=MouseY() drawmap(tile) If MouseDown(2) Then scrollmap() If MouseDown(1) Then editmap(2) omx=mx omy=my Flip Wend Function createmap(w,h) Dim map(w,h) mw=w : mh=h End Function Function drawmap(tile) For x=0 To mw For y=0 To mh DrawImage tile,mapx+(x*16),mapy+(y*16),map(x,y) Next Next End Function Function scrollmap() mapx=mapx+(mx-omx) mapy=mapy+(my-omy) End Function Function editmap(tile) For x=0 To mw For y=0 To mh If RectsOverlap (mx,my,1,1,mapx+(x*16),mapy+(y*16),16,16) Then map(x,y)=tile EndIf Next Next End Function |
||
Blitzkrieg Bop |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Danke, aber irgendwie ist es nicht das, was ich suche. ![]() Ich glaub du meinst es komplizierter, als ich. Später im Spiel wird auf Druck der Pfeiltasten einfach ScrollX erhöht oder verkleinert. Code: [AUSKLAPPEN] If Keydown(203) ScrollX = ScrollX - Scrollspeed So simpel. Hm... |
||
~ Hey Ho Let's Go ~ |
getlose |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
hm, ok, denn eben so
Code: [AUSKLAPPEN] Graphics 640,480,16,2 Global mw,mh,mapx,mapy,mx,my,omx,omy tile=LoadAnimImage ("blub.png",16,16,0,4) Dim map(0,0) createmap(20,20) SetBuffer BackBuffer() While Not KeyHit(1) Cls mx=MouseX() my=MouseY() drawmap(tile) scrollmap() If MouseDown(1) Then editmap(2) omx=mx omy=my Flip Wend Function createmap(w,h) Dim map(w,h) mw=w : mh=h End Function Function drawmap(tile) For x=0 To mw For y=0 To mh DrawImage tile,mapx+(x*16),mapy+(y*16),map(x,y) Next Next End Function Function scrollmap() If KeyDown(203) Then mapx=mapx+2 If KeyDown(205) Then mapx=mapx-2 If KeyDown(200) Then mapy=mapy+2 If KeyDown(208) Then mapy=mapy-2 End Function Function editmap(tile) For x=0 To mw For y=0 To mh If RectsOverlap (mx,my,1,1,mapx+(x*16),mapy+(y*16),16,16) Then map(x,y)=tile EndIf Next Next End Function so schwer ist das doch eigentlich garnicht |
||
Blitzkrieg Bop |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hi.
Okay, danke nochmal. Dann mache ich das nach dieser Methode. ![]() |
||
~ Hey Ho Let's Go ~ |
getlose |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
mach das, aber versuche auch mal den Code zu verstehen,
so schwer ist der ja wirklich nicht. :) |
||
Blitzkrieg Bop |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
![]() Habe ich gesagt, das ich deinen Code nicht verstehe? ![]() Ich verstehe den, nur ich wollte anfangs ne andere Methode anschlagen. Aber diese geht ja auch. 8) |
||
~ Hey Ho Let's Go ~ |
getlose |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
dann is ja gut ![]() |
||
Blitzkrieg Bop |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hm, bin grad am umcoden der Kollisionsabfragen!
Ohne Scrolling habe ich die so ca. Abgefragt: Code: [AUSKLAPPEN] Map(spx#/ts,spy#/ts + 1) etc. Wie muss ich das nun anstellen, wo ja sie Spielerkoordinaten immer gleich sind und sich nur das ScrollX ändert? Hm... Anstatt spx Scrollx zu schreiben geht net ![]() |
||
~ Hey Ho Let's Go ~ |
getlose |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
?? | ||
Blitzkrieg Bop |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
![]() Was gibbet da nicht zu verstehen? Also bevor ich das mit dem Scrolling gemacht habe, habe ich ja auf Kollision geprüft. Also welches Feld kommt rechts neben dem Spieler z.B. Die Frage ist nun, wie sich das mit Scrolling hinkriegen lässt :/ |
||
~ Hey Ho Let's Go ~ |
getlose |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
du musst bei allen kollisionsabfragen natürlich auch
mapx und mapy berücksichtigen, so wie ich es in der funktion "editmap" gemacht habe. |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group