als erstes mußt du aus den pixel-koordinaten der maus berechnen, über
welchem tile sie steht, also die map-index-nummern der maus-position.
das sind bei mir hier MouseMapX und MouseMapY. die maus steht dann also immer über dem tile map(MouseMapX,MouseMapY).
im zweiten code hier, siehst du, wie du diese variablen z.b. zum anzeigen eines extra maus-tiles verwenden kannst.
in diesem ersten code hier wird auch gleich das rechteck bestimmt. rectX1,rectY1,rectX2,rectY1 sind die eck-tiles des rechtecks auf der map, also keine pixels sondern indices. MouseIsPushed brauchst du um zu bestimmen, ob die maus gerade erst gedrückt wurde, oder ob du das rechteck schon lang ziehst, also ob der erste oder der zweite punkt des rechteck berechnet werden soll, denn der erste punkt soll ja fixiert bleiben wärend du das rechteck ziehst.
in deiner procedure 'displayLevel()' hab ich mal provisorisch was eingefügt, um ein rechteck an hand der rectX/Y/1/2-daten um die entsprechenden tiles herum zu zeichnen.
Code: Alles auswählen
Procedure checkControls()
ExamineKeyboard()
ExamineMouse()
MouseX = MouseX() ; -
MouseY = MouseY() ; - \
; > ich hab auch mal das hier vertauscht, damit du die map mit den aktuellen mouse-koordinaten scrollst, und nicht mit den alten.
scrollMap() ; - /
;########################################################################## new ###
MouseMapX = (MouseX-VerschiebenWidth) / #TileWidth
MouseMapY = (MouseY-VerschiebenHeight) / #TileHeight
If MouseButton(1)
If Not MouseIsPushed
MouseIsPushed=1
rectX1=MouseMapX
rectY1=MouseMapY
Else; [...if MousePushed]
rectX2=MouseMapX
rectY2=MouseMapY
EndIf
Else
MouseIsPushed=0
; hier koentest du zum beispiel die map in den rechteck mit einem bestimmten tile fuellen. z.b. mit 2 'For'-schleifen
EndIf
;##########################################################################
If KeyboardReleased(#PB_Key_Escape)
exitGame()
EndIf
EndProcedure
;_____________________________________________________________________________________________________________________________________________________________________________
Code: Alles auswählen
DisplaySprite( #MouseTileSpriteNr, MouseMapX*#TileWidth+VerschiebenWidth, MouseMapY*#TileHeight+VerschiebenHeight)
;_____________________________________________________________________________________________________________________________________________________________________________
Code: Alles auswählen
Procedure displayLevel()
For MapY = 0 To #MapHeight
For MapX = 0 To #MapWidth
x = (MapX * #TileWidth + VerschiebenWidth)
y = (MapY * #TileHeight + VerschiebenHeight)
DisplaySprite(map(MapX,MapY), x, y)
Next MapX
Next MapY
;########################################################################## new ###
If MouseIsPushed
boxX= rectX1*#TileWidth +VerschiebenWidth
boxY= rectY1*#TileHeight +VerschiebenHeight
boxWidth= (rectX2-rectX1)*#TileWidth +##TileWidth
boxHeight= (rectY1-rectY2)*#TileHeight +#TileHeight
StartDrawing( ScreenOutput() )
Box( boxX,boxY, boxWidth,boxHeight, $00ff00)
StopDrawing()
EndIf
;##########################################################################
EndProcedure
;_____________________________________________________________________________________________________________________________________________________________________________
hier sind noch die neuen variablen die ich verwendet habe, welche Global sein sollten (..müssen).
Code: Alles auswählen
Global MouseMapX
Global MouseMapY
Global MouseIsPushed
Global rectX1
Global rectY1
Global rectX2
Global rectY2
;_____________________________________________________________________________________________________________________________________________________________________________
ich hab kein PB 3.3. und hab das alles leider nicht getestet(!!!), weil ich mir nicht erst was funktionierendes in PB 4 basteln wollte, was ich dir eh nicht geben brauch. falls was nicht geht fragen. schau es dir in ruhe an, ist wahrscheinlich gleich ein bischen viel..