Kleine Scrolling Frage

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

 

Blitzkrieg Bop

Betreff: Kleine Scrolling Frage

BeitragFr, Dez 03, 2004 20:44
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi!
Man, das ist mir schon peinlich .... Rolling Eyes
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 Neutral

MFG
~ Hey Ho Let's Go ~
 

getlose

BeitragFr, Dez 03, 2004 20:46
Antworten mit Zitat
Benutzer-Profile anzeigen
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 Smile
 

Blitzkrieg Bop

BeitragFr, Dez 03, 2004 20:56
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragFr, Dez 03, 2004 21:01
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragFr, Dez 03, 2004 21:08
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi!

Zitat:

oder hab ich da was falsch verstanden ?


Jo! Very Happy

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. Smile
~ Hey Ho Let's Go ~
 

getlose

BeitragFr, Dez 03, 2004 21:19
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragFr, Dez 03, 2004 21:25
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke, aber irgendwie ist es nicht das, was ich suche. Confused
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

BeitragFr, Dez 03, 2004 21:28
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragFr, Dez 03, 2004 21:47
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi.
Okay, danke nochmal.
Dann mache ich das nach dieser Methode. Razz
~ Hey Ho Let's Go ~
 

getlose

BeitragFr, Dez 03, 2004 21:54
Antworten mit Zitat
Benutzer-Profile anzeigen
mach das, aber versuche auch mal den Code zu verstehen,
so schwer ist der ja wirklich nicht. :)
 

Blitzkrieg Bop

BeitragFr, Dez 03, 2004 22:13
Antworten mit Zitat
Benutzer-Profile anzeigen
Very Happy
Habe ich gesagt, das ich deinen Code nicht verstehe? Smile
Ich verstehe den, nur ich wollte anfangs ne andere Methode anschlagen.
Aber diese geht ja auch. 8)
~ Hey Ho Let's Go ~
 

getlose

BeitragFr, Dez 03, 2004 22:15
Antworten mit Zitat
Benutzer-Profile anzeigen
dann is ja gut Wink
 

Blitzkrieg Bop

BeitragFr, Dez 03, 2004 22:24
Antworten mit Zitat
Benutzer-Profile anzeigen
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 Neutral
~ Hey Ho Let's Go ~
 

getlose

BeitragFr, Dez 03, 2004 22:28
Antworten mit Zitat
Benutzer-Profile anzeigen
??
 

Blitzkrieg Bop

BeitragFr, Dez 03, 2004 22:31
Antworten mit Zitat
Benutzer-Profile anzeigen
Very Happy
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

BeitragFr, Dez 03, 2004 22:33
Antworten mit Zitat
Benutzer-Profile anzeigen
du musst bei allen kollisionsabfragen natürlich auch
mapx und mapy berücksichtigen, so wie ich es in der
funktion "editmap" gemacht habe.

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group