Grafik -- Tileänderung per Auswahlrechteck

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
Thomas
Beiträge: 893
Registriert: 06.07.2006 19:24
Wohnort: Regensburg
Kontaktdaten:

Grafik -- Tileänderung per Auswahlrechteck

Beitrag von Thomas »

Hallo,

ich habe im Moment ein Problem:

Ich habe eine Map (Grüne Fläche) und will drauf braune Flächen draufbauen können.
das klappt ja alles noch. Aber man soll mit der Maus erst so ein "Kästchen" großziehen können, und wenn man die linke Maustaste dan losläst soll es gebaut werden.
Das ganze soll aber bitte nach dem Raster Meiner Map sein.
Und um das braune soll dann auch noch ein Rand kommen (ein braun-grün-Übergang)

(Bitte malt nicht das ganze auf die Map drauf, sondern wechselt die Tiles aus)
:|
Bitte helft mir ich komm hier nicht weiter!

Im folgenden Download hab ich ein Codebeispiel, Map und Grafiken.


http://www.datei-upload.net/load.php?id=a687ef94f5cad6b
v6.00
Benutzeravatar
#NULL
Beiträge: 2238
Registriert: 20.04.2006 09:50

Beitrag von #NULL »

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..
my pb stuff..
Bild..jedenfalls war das mal so.
Benutzeravatar
Leonhard
Beiträge: 602
Registriert: 01.03.2006 21:25

Beitrag von Leonhard »

Hier ist schon mal ein anfang, muss noch optimiert werden:

Code: Alles auswählen

;                                                 %%%%%%%%%%%%%%%%%%%
;                                                 %                 %
;                                                 %  Bauernhof 1.0  %
;                                                 %                 %
;                                                 %%%%%%%%%%%%%%%%%%%



;**********-Sprite, Tastatur, Maus, Sprite3D initialisieren-**********

If InitSprite() = 0
  MessageRequester("Fehler (Sprite)", "Konnte DirectX nicht finden", 0)
  End
EndIf

If InitSprite3D() = 0
  MessageRequester("Fehler (3D)", "Konnte DirectX nicht finden", 0)
  End
EndIf

If InitKeyboard() = 0
  MessageRequester("Fehler (Keyboard)", "Konnte DirectX nicht finden", 0)
  End
EndIf

If InitMouse() = 0
  MessageRequester("Fehler (Mouse)", "Konnte DirectX nicht finden", 0)
  End
EndIf

;**********-Declarieren & Globalisieren-**********

;*****-Declarieren-*****

Declare exitGame()

;*****-Globalisieren-*****

Global VerschiebenHeight.f
Global VerschiebenWidth.f

Global VerschiebenEinheit.f

Global MouseX.f
Global MouseY.f

;**********-Konstanten, Variablen werte zuweisen-**********

#ScreenWidth = 1024
#ScreenHeight = 768

#MapWidth = 19
#MapHeight = 19

#TileWidth = 60
#TileHeight = 60

#minSpriteName = 64
#maxSpriteName = 73

#Mouse = 9999

#MapGesWidth  = (#MapWidth  + 1) * #TileWidth
#MapGesHeight = (#MapHeight + 1) * #TileHeight

VerschiebenHeight = 0
VerschiebenWidth = 0

VerschiebenEinheit = 10

;**********-Grafiken laden-**********

Procedure loadGraphics()

  For SpriteName = #minSpriteName To #maxSpriteName
    If ReadFile(0, "Grafik\" + Str(SpriteName) + ".bmp")
      CloseFile(0)
      LoadSprite(SpriteName, "Grafik\" + Str(SpriteName) + ".bmp", #PB_Sprite_Texture)
      CreateSprite3D(SpriteName, SpriteName)
    EndIf
  Next SpriteName

  LoadSprite(#Mouse, "Grafik\mouse.bmp", 0)

EndProcedure

;**********-Map laden-**********

Procedure loadMap(mapNumber)

  Global Dim map.b(#MapWidth, #MapHeight)

  If ReadFile(0, "Map" + Str(mapNumber) + ".txt")
    For MapY = 0 To #MapHeight
      For MapX = 0 To #MapWidth
        map(MapX,MapY) = ReadByte(0)
      Next MapX
      ReadWord(0)
    Next MapY
    CloseFile(0)
  EndIf

EndProcedure

;**********-Maus anzeigen-**********

Procedure displayMouse()

  If MouseX > #ScreenWidth - 5
   MouseX = #ScreenWidth - 5
  EndIf
  If MouseY > #ScreenHeight - 5
   MouseY = #ScreenHeight - 5
  EndIf
  DisplayTransparentSprite(#Mouse, MouseX, MouseY)

EndProcedure

;**********-Map anzeigen-**********

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

EndProcedure

;**********-Menu-**********

Procedure scrollMap()

  ;*****-Links-*****
  If MouseX <= 20
    VerschiebenWidth = VerschiebenWidth + VerschiebenEinheit
  EndIf
  
  ;*****-Auf-*****
  If MouseY <= 20
    VerschiebenHeight = VerschiebenHeight + VerschiebenEinheit
  EndIf
  
  ;*****-Ab-*****
  If MouseY >= #ScreenHeight - 20
    VerschiebenHeight = VerschiebenHeight - VerschiebenEinheit
  EndIf
  
  ;*****-Rechts-*****
  If MouseX >= #ScreenWidth - 20
    VerschiebenWidth = VerschiebenWidth - VerschiebenEinheit
  EndIf

  ;*****-"Anschlag"-*****
  If VerschiebenWidth >= 0
   VerschiebenWidth = 0
  EndIf
  If VerschiebenHeight >= 0
   VerschiebenHeight = 0
  EndIf
  If VerschiebenWidth <= -#MapGesWidth + #ScreenWidth 
   VerschiebenWidth = -#MapGesWidth + #ScreenWidth
  EndIf
  If VerschiebenHeight <= -#MapGesHeight + #ScreenHeight
   VerschiebenHeight = -#MapGesHeight + #ScreenHeight
  EndIf

EndProcedure

;**********-MouseEvents-***********

;Flagaufteilung:
;0000
;||||
;||\|
;|| Click
;|Move
;Weel

#MouseEvent_LClick = %1
#MouseEvent_RClick = %10
#MouseEvent_MClick = %11
#MouseEvent_Move   = %100
#MouseEvent_Wheel  = %1000

Procedure GetMouseEvent()
  Protected lFlag.l
  
  If MouseButton(#PB_MouseButton_Left) : lFlag | #MouseEvent_LClick
  ElseIf MouseButton(#PB_MouseButton_Right) : lFlag | #MouseEvent_RClick
  ElseIf MouseButton(#PB_MouseButton_Middle) : lFlag | #MouseEvent_MClick
  EndIf
  
  If MouseDeltaX() <> 0 Or MouseDeltaY() <> 0 : lFlag | #MouseEvent_Move
  EndIf
  
  If MouseWheel() <> 0 : lFlag | #MouseEvent_Wheel
  EndIf
  
  ProcedureReturn lFlag
EndProcedure

Procedure DoByMouseEvent(lMouseEvent.l)
  Protected x.l, y.l
  
  If lMouseEvent & #MouseEvent_LClick
    x = (MouseX-VerschiebenWidth) / #TileWidth 
    y = (MouseY-VerschiebenHeight) / #TileHeight
    
    ;/ Diese Abfragen könnte man bestimmt auf weniger kürzen.
    
    map(x, y)=72
    If x-1>=0 And y-1>=0
      map(x-1, y-1)=69
    EndIf
    If x-1>=0
      map(x-1, y)=64
    EndIf
    If x-1>=0 And y+1<=#MapHeight
      map(x-1, y+1)=68
    EndIf
    If y+1<=#MapHeight
      map(x, y+1)=67
    EndIf
    If y+1<=#MapHeight And x+1<=#MapWidth
      map(x+1, y+1)=71
    EndIf
    If x+1<=#MapWidth
      map(x+1, y)=65
    EndIf
    If x+1<=#MapWidth And y-1>=0
      map(x+1, y-1)=70
    EndIf
    If y-1>=0
      map(x, y-1)=66
    EndIf
  EndIf
  
  ProcedureReturn lMouseEvent
EndProcedure

;**********-Abfrage der Eingabegeräte-**********

Procedure checkControls()

  ExamineKeyboard()
  ExamineMouse()
  
  scrollMap()
 
  MouseX = MouseX()
  MouseY = MouseY()

  DoByMouseEvent(GetMouseEvent())

  If KeyboardReleased(#PB_Key_Escape)
    exitGame()
  EndIf

EndProcedure

;**********-Spiel beenden-**********

Procedure exitGame()

  CloseScreen()
  End

EndProcedure

;**********-Einzelnen Schleifen "zusammensetzen"-**********

Procedure gameLoop()

  ClearScreen(0)
  
  checkControls()
  
  Start3D()
    displayLevel()
    displayMouse()

    FlipBuffers()
  Stop3D()

  Delay(0)

EndProcedure

;**********-Alles im Screen anzeigen-***********

If OpenScreen(#ScreenWidth, #ScreenHeight, 32, "Screen")

  loadGraphics()

  Sprite3DQuality(1)

  loadMap(1)
  
  Repeat

    gameLoop()

  ForEver
EndIf
Edit 1: Die ermittlung des gedrückten mapeintrags funzt jetzt!

Edit 2: Hier fehlen Map-Stücke!!!
Die Map-Teile 68, 69, 70, 71 müssen noch umgekährt vorhanden sein.
Benutzeravatar
#NULL
Beiträge: 2238
Registriert: 20.04.2006 09:50

Beitrag von #NULL »

@T.O.
ich fände es nicht schlecht, wenn du den thread-titel so änderst, dass man ihn auch wiederfindet.

[ich setzte hier schonmal ein such-, bzw ein find-tag:
* Auswahlrechteck ]
my pb stuff..
Bild..jedenfalls war das mal so.
Benutzeravatar
Thomas
Beiträge: 893
Registriert: 06.07.2006 19:24
Wohnort: Regensburg
Kontaktdaten:

Beitrag von Thomas »

Danke erstmal, ich muss es aber erst noch ausprobieren.

(Wer war den so frei und hat das "titleänderung per auswahlrechteck" dazugeschrieben?, ich wars nicht!)
v6.00
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

da steht "Tileänderung"
es wird wohl ein MOD gewesen sein, da du es ja nicht gemacht hast.
nächstmal bitte von anfang an einen aussagekräftigen titel wählen.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
#NULL
Beiträge: 2238
Registriert: 20.04.2006 09:50

Beitrag von #NULL »

ich habe meinen code nun doch mal getestet und vervollständigt. jetzt funktioniert er auch <) . das map array wird jetzt auch gleich angepasst. hier mal im ganzen:
[falls es in Pb3.3 kein DrawingMode() gibt, nimm es einfach weg (..also das DrawingMode() meine ich :lol: ) ]

Code: Alles auswählen

;                                                 %%%%%%%%%%%%%%%%%%%
;                                                 %                 %
;                                                 %  Bauernhof 1.0  %
;                                                 %                 %
;                                                 %%%%%%%%%%%%%%%%%%%



;**********-Sprite, Tastatur, Maus, Sprite3D initialisieren-**********

If InitSprite() = 0
  MessageRequester("Fehler (Sprite)", "Konnte DirectX nicht finden", 0)
  End
EndIf

If InitSprite3D() = 0
  MessageRequester("Fehler (3D)", "Konnte DirectX nicht finden", 0)
  End
EndIf

If InitKeyboard() = 0
  MessageRequester("Fehler (Keyboard)", "Konnte DirectX nicht finden", 0)
  End
EndIf

If InitMouse() = 0
  MessageRequester("Fehler (Mouse)", "Konnte DirectX nicht finden", 0)
  End
EndIf

;**********-Declarieren & Globalisieren-**********

;*****-Declarieren-*****

Declare exitGame()

;*****-Globalisieren-*****

Global VerschiebenHeight.f
Global VerschiebenWidth.f

Global VerschiebenEinheit.f

Global MouseX.f
Global MouseY.f

;################################################################################################# new ###
Global MouseMapX
Global MouseMapY
Global MouseIsPushed
Global rectX1
Global rectY1
Global rectX2
Global rectY2 
;#################################################################################################

;**********-Konstanten, Variablen werte zuweisen-**********

#ScreenWidth = 1024
#ScreenHeight = 768

#MapWidth = 19
#MapHeight = 19

#TileWidth = 60
#TileHeight = 60

#minSpriteName = 64
#maxSpriteName = 73

#Mouse = 9999

#MapGesWidth  = (#MapWidth  + 1) * #TileWidth
#MapGesHeight = (#MapHeight + 1) * #TileHeight

VerschiebenHeight = 0
VerschiebenWidth = 0

VerschiebenEinheit = 10

;**********-Grafiken laden-**********

Procedure loadGraphics()

  For SpriteName = #minSpriteName To #maxSpriteName
    If ReadFile(0, "Grafik\" + Str(SpriteName) + ".bmp")
      CloseFile(0)
      LoadSprite(SpriteName, "Grafik\" + Str(SpriteName) + ".bmp", #PB_Sprite_Texture)
      CreateSprite3D(SpriteName, SpriteName)
    EndIf
  Next SpriteName

  LoadSprite(#Mouse, "Grafik\mouse.bmp", 0)

EndProcedure

;**********-Map laden-**********

Procedure loadMap(mapNumber)

  Dim map.b(#MapWidth, #MapHeight)

  If ReadFile(0, "Map" + Str(mapNumber) + ".txt")
    For MapY = 0 To #MapHeight
      For MapX = 0 To #MapWidth
        map(MapX,MapY) = ReadByte()
      Next MapX
      ReadWord()
    Next MapY
    CloseFile(0)
  EndIf

EndProcedure

;**********-Maus anzeigen-**********

Procedure displayMouse()

  If MouseX > #ScreenWidth - 5
   MouseX = #ScreenWidth - 5
  EndIf
  If MouseY > #ScreenHeight - 5
   MouseY = #ScreenHeight - 5
  EndIf
  DisplayTransparentSprite(#Mouse, MouseX, MouseY)
   ;################################################################################################# new ###
   StartDrawing( ScreenOutput() )
     DrawingMode(4)
     Box( MouseMapX*#TileWidth+VerschiebenWidth, MouseMapY*#tileheight+VerschiebenHeight,   #TileWidth, #TileHeight,   $0000aa)
    StopDrawing()
  ;#################################################################################################
EndProcedure

;**********-Map anzeigen-**********

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
    If rectX1>rectX2
    	startX=rectX2
	    EndeX=rectX1
	Else
		startX=rectX1
		EndeX=rectX2
	EndIf
    If rectY1>rectY2
    	startY=rectY2
	    EndeY=rectY1
	Else
		startY=rectY1
		EndeY=rectY2
	EndIf
    For MapY = startY To EndeY
      For MapX = startX To EndeX
        x = (MapX * #TileWidth + VerschiebenWidth)
        y = (MapY * #TileHeight + VerschiebenHeight)
        DisplaySprite( 72, x, y)
      Next MapX
    Next MapY
  EndIf
  ;#################################################################################################
EndProcedure 
;**********-Menu-**********

Procedure scrollMap()

  ;*****-Links-*****
  If MouseX <= 20
    VerschiebenWidth = VerschiebenWidth + VerschiebenEinheit
  EndIf
  
  ;*****-Auf-*****
  If MouseY <= 20
    VerschiebenHeight = VerschiebenHeight + VerschiebenEinheit
  EndIf
  
  ;*****-Ab-*****
  If MouseY >= #ScreenHeight - 20
    VerschiebenHeight = VerschiebenHeight - VerschiebenEinheit
  EndIf
  
  ;*****-Rechts-*****
  If MouseX >= #ScreenWidth - 20
    VerschiebenWidth = VerschiebenWidth - VerschiebenEinheit
  EndIf

  ;*****-"Anschlag"-*****
  If VerschiebenWidth >= 0
   VerschiebenWidth = 0
  EndIf
  If VerschiebenHeight >= 0
   VerschiebenHeight = 0
  EndIf
  If VerschiebenWidth <= -#MapGesWidth + #ScreenWidth 
   VerschiebenWidth = -#MapGesWidth + #ScreenWidth
  EndIf
  If VerschiebenHeight <= -#MapGesHeight + #ScreenHeight
   VerschiebenHeight = -#MapGesHeight + #ScreenHeight
  EndIf

EndProcedure

;**********-Abfrage der Eingabegeräte-**********

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/2) / #TileWidth
  MouseMapY = (MouseY-VerschiebenHeight-#TileHeight/2) / #TileHeight

  If MouseButton(1)
    If MouseIsPushed=0
      MouseIsPushed=1
      rectX1=MouseMapX
      rectY1=MouseMapY
    Else; [...if MousePushed]
      rectX2=MouseMapX
      rectY2=MouseMapY 
    EndIf
  Else
    MouseIsPushed=0
    If rectX1>rectX2
    	startX=rectX2
	    EndeX=rectX1
	Else
		startX=rectX1
		EndeX=rectX2
	EndIf
    If rectY1>rectY2
    	startY=rectY2
	    EndeY=rectY1
	Else
		startY=rectY1
		EndeY=rectY2
	EndIf
    For MapY = startY To EndeY
      For MapX = startX To EndeX
        If Mapx>=0 And MapX <=#MapWidth And MapY>=0 And MapY <=#MapHeight ;   << array grenzen einhalten
          Map(MapX,MapY)=72
        EndIf
      Next MapX
    Next MapY
  EndIf
  ;#################################################################################################

  If KeyboardReleased(#PB_Key_Escape)
    exitGame()
  EndIf

EndProcedure 
;**********-Spiel beenden-**********

Procedure exitGame()

  CloseScreen()
  End

EndProcedure

;**********-Einzelnen Schleifen "zusammensetzen"-**********

Procedure gameLoop()

  ClearScreen(0,0,0)
  
  checkControls()
  
  Start3D()
    displayLevel()
    displayMouse()

    FlipBuffers()
  Stop3D()

  Delay(0)

EndProcedure

;**********-Alles im Screen anzeigen-***********

If OpenScreen(#ScreenWidth, #ScreenHeight, 32, "Screen")

  loadGraphics()

  Sprite3DQuality(1)

  loadMap(1)
  
  Repeat

    gameLoop()

  ForEver
EndIf
my pb stuff..
Bild..jedenfalls war das mal so.
Benutzeravatar
Thomas
Beiträge: 893
Registriert: 06.07.2006 19:24
Wohnort: Regensburg
Kontaktdaten:

Beitrag von Thomas »

Also

Code: Alles auswählen

DrawingMode()
gibt es schon. 8)
v6.00
Benutzeravatar
Thomas
Beiträge: 893
Registriert: 06.07.2006 19:24
Wohnort: Regensburg
Kontaktdaten:

Beitrag von Thomas »

So,
hab jetz die Codes ausprobiert.
Das von Leonhard klappt bei mir nicht ganz (ich kann das "Feld" nicht großziehen), aber auf den ersten Blick, denke ich, hat er das richtig verstanden. :| :D
Bei #Null klappt es, aber am anfang (nach dem compilieren) wird gleich ein braunes Sprite in die Ecke gesetzt. aber das mit dem großziehen klappt ganz gut. :D
Und meine Eigentliche Frage war eigentlich (ich glaube ihr habt es nicht ganz verstanden, wie ich das meinte), dass um das "braune" Feld, das man großziehen kann, ein Rand aus den Sprites 64 - 71 ist. :|

(Darf ich bitte noch einen Sonderwunsch stellen?, man soll erst ein graues Auswahlrechteck großziehen können und erst, wenn man die linke Maustaste loslässt, sollen die braunen Sprites da sein.) :oops:
v6.00
Benutzeravatar
#NULL
Beiträge: 2238
Registriert: 20.04.2006 09:50

Beitrag von #NULL »

wenn das feld oben links weg soll, dann ändere in checkControls() das zweite Else, also das:

Code: Alles auswählen

    ;...
  Else
    MouseIsPushed=0
    ;...
in

Code: Alles auswählen

    ;...
  ElseIf MouseIsPushed=1
    MouseIsPushed=0
    ;...

übrigens werden die tiles vor dem loslassen nur angezeigt, aber erst beim loslassen in das map-array gepackt. wenn du sie vor dem loslassen nicht sehen willst, mußt du diese doppelte for-schleife zum anzeigen entfernen [am ende von displayLevel() ], aber dann siehst du nix mehr von einem rechteck. kannst das rechteck ja auch wie in meinen vorherigen code mit Box(..) ect. darstellen.

und das mit den rändern is auch nicht ohne, da mußt du viel fallunterscheidung machen oder dir vorher daten-strukturen anlegen, welche die zusammengehörigkeit der einzelnen grafiken beschreiben. wie man das umsetzt hängt auch davon ab, wie du mit dein programm noch weiter entwicklen willst, ob andere tile-übergänge hinzukommen oder es bei den 8 bleiben soll (mit den 8 übergängen kannst du übrigens nur rechteckige felder darstellen, weil du keine inneren ecken hast, sondern nur äußere).
für eine einfache und schnelle lösung könntest du einfach gucken, welche felder an welchem rand des auswahlrechteckes liegen, und ihnen dann die geraden übergänge zuweisen. bzw wenn ein feld in der ecke der auswahl ist, dann bekommt es eben das entsprechende ecktile. ..ganz einfach.

übrigens, wenn menschen nicht verstanden werden, sondern nur benutzt, werden sie traurig. ich glaube das ein code genauso fühlt :wink:
my pb stuff..
Bild..jedenfalls war das mal so.
Antworten