Aktuelle Zeit: 05.06.2020 20:25

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]




Ein neues Thema erstellen Auf das Thema antworten  [ 47 Beiträge ]  Gehe zu Seite Vorherige  1, 2, 3, 4, 5
Autor Nachricht
 Betreff des Beitrags:
BeitragVerfasst: 01.12.2006 15:06 
Offline
Benutzeravatar

Registriert: 19.04.2006 18:24
Das Auto ist total geil!


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: 19.01.2007 01:31 
Offline
Benutzeravatar

Registriert: 29.08.2004 13:59
Wohnort: Baden-Württemberg
Ist zwar schon was länger her ... aber wegen Zeit und auch Lust hats was
länger gedauert :oops: ... und wo ich den Code schon hab ^_^

Also hab mal einen funktionsfähigen Code programmiert, der das
Zoomen vernünftig in Echtzeit realisiert. Nen etwas besserer PC ist aber
vorraussetzung :wink:

Ganz Fehlerfrei isses aber auch nicht, aber irgend wann muss gut sein
<) , vielleicht findet von euch ja auch einer ne Lösung :D
... bei Sprite3DQuality = 1 ists gekachelt -.-
... und wenn die Sprite3D-Breite/-Höhe auf z.b. 1024 gesetzt wird, springt
die Karte bei Zoom 1190% auf 1192% -.- ... vermutlich seh ich den Wald
vor lauter Bäumen nicht /:->
... ExamineMouse() gibt #False zurück bei geringer FPS :|

Zoomen durch gedrückter rechter Maustaste (auf und ab)
Bewegen auf der Karte durch gedrückter linker Maustaste

Code:
; © 2007 by PMV
EnableExplicit

;Startkoordinaten der Map
#StartX = 000
#StartY = 000

;Angabe des Pfades zu den Sprites
;[iii] ist Platzhalter für die Grafiken bei 001 - 400 (mit führenden Nullen)
;[i] ist Platzhalter für die Grafiken bei 1 - 400 (ohne führende Nullen)
#Path = "Pic\[iii].png"

;Quialität der Sprite3D (AA) ein oder aus
#Sprite3DQuality = 0 ;eingeschalet

;größe der genutzten Tiles
;da Sprite3D genutzt wird, sollte Breite und Höhe gleich sein und ein Wert aus 2^X.
#Sprite3DWidth = 2048
#Sprite3DHeight = 2048

;extreme der Zoom-Möglichkeiten
#MaxZoom = 1276
#MinZoom = 5

;Auflösung
#ScreenWidth = 1024
#ScreenHeight = 768

;Tilegröße der Origniale
#OTileWidth = 500
#OTileHeight = 500

Global Dim Tile.l(19, 19)
Global Dim MapSprite.l(1,1)
Global Dim MapSprite3D.l(1,1)



Structure TileNumber
  Width.l
  Height.l
EndStructure
Global TileNumber.TileNumber

Global PosX.f, PosY.f
Global TileWidth.l, TileHeight.l ;aktuelle größe der Tiles in Pixel
Global Zoom.l  ;aktuelle Zoomfaktor in Prozent

Global MapX.l, MapY.l ;Koordinaten der Map
; ------------------------------------

;Map darf nicht übertrehten werden
Macro CheckMapCoordinates()
  If TileWidth * TileNumber\Width - MapX * 100 / Zoom < #ScreenWidth
    MapX = (TileWidth * TileNumber\Width - #ScreenWidth) * Zoom / 100 / 2
  EndIf
  If TileHeight * TileNumber\Height - MapY * 100 / Zoom < #ScreenHeight
    MapY = TileNumber\Height * TileHeight * Zoom / 100 - #ScreenHeight * Zoom / 100
  EndIf
  If MapX < 0
    If TileWidth * TileNumber\Width < #ScreenWidth
      MapX = (TileWidth * TileNumber\Width - #ScreenWidth) * Zoom / 100 / 2
    Else
      MapX = 0
    EndIf
  EndIf
  If MapY < 0 : MapY = 0 : EndIf
EndMacro
; -------------------------------------

;zeichnet die 3 Ladebalken und den aktuellen Status
Procedure DisplayState(load.l, create.f, free.l, Text$)
    Protected y.l
    StartDrawing(ScreenOutput())
      DrawingMode(#PB_2DDrawing_Default)
      Box(#ScreenWidth/2 - 103, #ScreenHeight/2 - 36, 206, 22, RGB(113, 2, 0))
      Box(#ScreenWidth/2 - 100, #ScreenHeight/2 - 32, load/2, 14, RGB(162, 3, 0))

      Box(#ScreenWidth/2 - 103, #ScreenHeight/2 - 11, 206, 22, RGB(54, 115, 61))
      Box(#ScreenWidth/2 - 100, #ScreenHeight/2 - 7, create*200, 14, RGB(80, 169, 90))

      Box(#ScreenWidth/2 - 103, #ScreenHeight/2 + 14, 206, 22, RGB(130, 130, 0))
      Box(#ScreenWidth/2 - 100, #ScreenHeight/2 + 18, free/2, 14, RGB(186, 186, 0))

      DrawingMode(#PB_2DDrawing_Transparent | #PB_2DDrawing_XOr)
      If free < 400 : y = 25 : EndIf
      If create < 1 : y = 0 : EndIf
      If load < 400 : y = - 25 : EndIf
      DrawText(#ScreenWidth/2 - TextWidth(Text$)/2, #ScreenHeight/2 - TextHeight(Text$)/2 + y, Text$, $f0f0f0f0)
    StopDrawing()
    FlipBuffers(0)
EndProcedure
; --------------------------------------

;zeichnet die angegebene Szene ausgehend von den Originaltiles auf den aktuellen Buffer
Procedure DisplayTileScene(X, Y, Width, Height)
  Protected TileX.l, TileY.l, DisplayX.l, DisplayY.l
  x = -x
  y = -y
 
  TileX = Abs(Int(X / #OTileWidth))
  TileY = Abs(Int(Y / #OTileHeight))
  For DisplayX = X % #OTileWidth To Width-1 Step #OTileWidth
    For DisplayY = Y % #OTileHeight To Height-1 Step #OTileHeight
      If TileX >= 0 And TileX < 20 And TileY >= 0 And TileY < 20
        DisplaySprite(Tile(TileX, TileY), DisplayX, DisplayY)
      Else
        Break
      EndIf
      TileY + 1
    Next
    TileY = Abs(Int(Y / #OTileHeight))
    TileX + 1
  Next
EndProcedure
; ---------------------------

;lädt die Grafiken aus den Bilddateien
Procedure InitMap()
  Protected x.l, y.l, i.l, Path$

  ClearScreen(0)
  FlipBuffers()
  ClearScreen(0)
  For i = 0 To 399
    ExamineKeyboard()
    If KeyboardPushed(#PB_Key_All) <> #False : End : EndIf
    If FindString(#Path, "[iii]", 1)
      Path$ = ReplaceString(#Path, "[iii]", RSet(Str(i+1), 3, "0"))
    Else
      Path$ = ReplaceString(#Path, "[i]", Str(i))
    EndIf
    Tile(x, y) = LoadSprite(#PB_Any, Path$ , #PB_Sprite_Memory)
    If Not Tile(x, y)
      CloseScreen()
      MessageRequester("Error", "Can't load sprite " + Path$ + "!")
      End
    EndIf
    x + 1
    If x >= 20 : y + 1 : x = 0 : EndIf
   
   
    DisplayState(i+1, 0, 0, "load original tiles ... " + StrF((i+1) / 4, 0) + "%")
  Next
 
  TileNumber\Width = Round(#OTileWidth * 20 / #Sprite3DWidth, 1)
  TileNumber\Height = Round(#OTileHeight * 20 / #Sprite3DHeight, 1)
  Dim MapSprite(TileNumber\Width, TileNumber\Height)
  Dim MapSprite3D(TileNumber\Width, TileNumber\Height)
  TileWidth = #Sprite3DWidth
  TileHeight = #Sprite3DHeight
  Zoom = 100
EndProcedure

;erstellt die neuen Tiles mit den gewünschten Größen
Procedure CreateMap()
  Protected x.l, y.l, i.l, Text$, PixX.l, PixY.l, State.f
   
  ClearScreen(0)
  FlipBuffers()
  ClearScreen(0)
  For x = 0 To TileNumber\Width - 1
    For y = 0 To TileNumber\Height - 1
    ExamineKeyboard()
    If KeyboardPushed(#PB_Key_All) <> #False : End : EndIf
   
    MapSprite(x, y) = CreateSprite(#PB_Any, #Sprite3DWidth, #Sprite3DHeight, #PB_Sprite_Texture)
    If Not MapSprite(X, Y)
      CloseScreen()
      MessageRequester("Error", "Can't create sprite number" + Str(i+1) + "!")
      End
    EndIf
    TransparentSpriteColor(MapSprite(x, y), RGB(255,0,255))
    UseBuffer(MapSprite(x, y))
    DisplayTileScene(x * #Sprite3DWidth, Y * #Sprite3DHeight, #Sprite3DWidth, #Sprite3DHeight)
    MapSprite3D(x, y) = CreateSprite3D(#PB_Any, MapSprite(x, y))
    If Not IsSprite3D(MapSprite3D(x, y))
      CloseScreen()
      MessageRequester("Error", "Can't create sprite3d number " + Str(i+1) + "!")
      End
    EndIf     
   
    State = (x*TileNumber\Width+y+1)/(TileNumber\Width*TileNumber\Height)
    DisplayState(400, State, 0, "create new tiles ... " + StrF((State) * 100, 0) + "%")
    Next
  Next

EndProcedure

; gibt die am anfang geladenen Tiles wieder frei
Procedure FreeTempData()
  Protected X.l, Y.l, i.l, Text$

  For i = 0 To 399
    FreeSprite(Tile(x, y))
    x + 1
    If x >= 20 : y + 1 : x = 0 : EndIf
    DisplayState(400, 1, i+1, "free old tiles ... " + StrF((i+1) / 4, 0) + "%")
  Next
EndProcedure
; ------------------------------------------

;zeichnet die angegebene Szene auf den aktuellen Buffer
Procedure DisplayMap(X, Y, Width, Height)
  Protected TileX.l, TileY.l, DisplayX.l, DisplayY.l
  Protected MoveX.l
  If X < -#ScreenWidth
    ;MoveX = Int((-X) / #ScreenWidth) * #ScreenWidth * 100 / Zoom
  EndIf
 
   
  X * 100 / Zoom
  Y * 100 / Zoom
 
  TileX = Abs(Int(X / TileWidth))
  TileY = Abs(Int(Y / TileHeight))
  Start3D()
 
  DisplayX = -X % TileWidth
  Repeat ;For DisplayX = X % #TileWidth To Width-1 Step #TileWidth

    DisplayY = -Y % TileHeight
    Repeat ;For DisplayY = Y % #TileHeight To Height-1 Step #TileHeight
      If TileX < TileNumber\Width And TileY < TileNumber\Height
        DisplaySprite3D(MapSprite3D(TileX, TileY), MoveX + DisplayX, DisplayY)
      EndIf
      TileY + 1
     
      DisplayY + TileHeight
    Until DisplayY >= Height - 1
    TileY = Abs(Int(Y / TileHeight))
    TileX + 1
   
    DisplayX + TileWidth
  Until DisplayX >= Width-1
  Stop3D()
EndProcedure
; ---------------------------


Procedure ZoomMap(Zoom.l)
  Protected x.l, y.l, Width.l, Height.l
  If Zoom <= 0 Or Zoom > #MaxZoom
    ProcedureReturn #False
  EndIf

  TileWidth = 100 * #Sprite3DWidth / Zoom
  TileHeight = 100 * #Sprite3DHeight / Zoom
  For x = 0 To TileNumber\Width - 1
    For y = 0 To TileNumber\Height - 1
      ZoomSprite3D(MapSprite3D(X, Y), TileWidth, TileHeight)
    Next
  Next
  ProcedureReturn #True
EndProcedure


Procedure Init()
  InitSprite()
  InitSprite3D()
  Sprite3DQuality(#Sprite3DQuality)
  InitKeyboard()
  InitMouse()
  UsePNGImageDecoder()
  If Not OpenScreen(#ScreenWidth, #ScreenHeight, 32, "")
    MessageRequester("Error", "Can't open screen! (" + Str(#ScreenWidth) + " X " + Str(#ScreenHeight))
    End
  EndIf
  InitMap()
  CreateMap()
  FreeTempData()
  Zoom = 1000
  ZoomMap(Zoom)

  MapX = #StartX
  MapY = #StartY
  CheckMapCoordinates()
EndProcedure

;-Programmstart
Define RelativZoom.l

Define ButtonStateLeft.l, tempZoom.l, ZoomStart.l, X.l, Y.l
Define ButtonStateRight.l

Define.l MouseX, MouseY, OldMouseX, OldMouseY, tempMapX, tempMapY, tempX, tempY

Define FPS.l, FPSCounter.l, FPSTimer.l, LoopTime.l, Timer.l
Init()
Repeat
  If Not ExamineMouse()
    ;bei hoher PC-Auslastung (geringer FPS) funktioniert ExamineMouse() nicht richtig
    Beep_(1000, 100)
  EndIf
 
 ;Zoom per gedrückter linker Maustaste
 If MouseButton(#PB_MouseButton_Left)
    If ButtonStateLeft
      Zoom = tempZoom + (MouseY() - ZoomStart) * 2
      MapX = tempX + (tempZoom - Zoom) * #ScreenWidth/200
      MapY = tempY + (tempZoom - Zoom) * #ScreenHeight/200

      If Zoom < #MinZoom : Zoom = #MinZoom : EndIf
      If Zoom > #MaxZoom : Zoom = #MaxZoom : EndIf

      CheckMapCoordinates()
     
      ZoomMap(Zoom)
      ClearScreen(0)
    Else
      tempZoom = Zoom
      tempX = MapX
      tempY = MapY
      ZoomStart = MouseY()
      ButtonStateLeft = 1
    EndIf
  ElseIf ButtonStateLeft
    ButtonStateLeft = 0
    TempZoom = 0
    tempX = 0
    tempY = 0
    ZoomStart = 0
  EndIf
  ; ---------------------------

  If MouseButton(#PB_MouseButton_Right)
    If ButtonStateRight = 0
      MouseX = MouseX()
      MouseY = MouseY()
      ButtonStateRight = 1
      tempMapX = MapX
      tempMapY = MapY
    EndIf
    If OldMouseX <> MouseX() Or OldMouseY <> MouseY()
      MapX = tempMapX - (MouseX() - MouseX) * Zoom / 100
      MapY = tempMapY - (MouseY() - MouseY) * Zoom / 100
    EndIf
    OldMouseX = MouseX()
    OldMouseY = MouseY()
   
    CheckMapCoordinates()
  ElseIf ButtonStateRight
    ButtonStateRight = 0
  EndIf

  If TileWidth * TileNumber\Width - MapX * 100 / Zoom  < #ScreenWidth
    ClearScreen(0)
  EndIf

  ;Karte anzeigen
  DisplayMap(MapX, MapY, #ScreenWidth, #ScreenHeight);, #ScreenWidth * Zoom, #ScreenHeight * Zoom)
 
  FPSCounter + 1
  If ElapsedMilliseconds() >= FPSTimer + 1000 : FPS = FPSCounter : FPSCounter = 0 : FPSTimer = ElapsedMilliseconds() : EndIf

  ;GUI
  StartDrawing(ScreenOutput())
    DrawingMode(0)
    DrawText(5, 5, "FPS: " + Str(FPS), $ffffff, 0)
    DrawText(75, 5, "Zoom: " + Str(Zoom) + " %", $ffffff, 0)
    DrawText(190, 5, "Sprites: " + Str(TileNumber\Width) + " x " + Str(TileNumber\Height), $ffffff, 0)
    DrawText(300, 5, "MapX/MapY: " + Str(MapX) + " / " + Str(MapY), $ffffff, 0)
    DrawText(600, 5, "MouseRight: " + Str(ButtonStateRight), $ffffff, 0)
   
    Circle(MouseX(), MouseY(), 2, $FFFFFF)
  StopDrawing()
  FlipBuffers()
 
  ;Zeitberechnung
  LoopTime = ElapsedMilliseconds() - Timer
  Timer = ElapsedMilliseconds()
 
  ;Tastatur, per Any-Key aus dem ganzen raus gehen
  ExamineKeyboard()
Until KeyboardPushed(#PB_Key_All) <> #False
End

MFG PMV

_________________
alte Projekte:
TSE, CWL, Chatsystem, GameMaker, AI-Game DLL, Fileparser, usw. -.-


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: 19.01.2007 13:41 
Offline

Registriert: 05.05.2005 19:06
so nen proggi das eine pixelwelt downloadet habe ich auch shcon mal gecodet, nur bei dieser seite:

http://oink.elrellano.com/casa.php

die aber allerdings gerade offline ist, wenn man das casa allerdings wegnimmt und in der navi auf pixel geht, sieht man eine kleines bildchen
das ging dort (265x256 ca.) um 24x24 bilder... also

0-0
0-1
...
1-0
1-1
...
24-24

so. das war leicht zu downloadne und ich konnte es auch gut anzeigen. aber etwas steht fest: für so eine pixelwelt, muss man schon ziemlich viel freizeit haben! :D

Gruss
PMTheQuick ;)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: 27.02.2007 22:16 
Offline
Benutzeravatar

Registriert: 06.12.2004 23:15
Wohnort: GM
Ich hab auch mal was in Iso Ansicht gepixelt. Nur ein Haus, aber es ist unser Haus (wo ich wohne).

Das steht jetzt in Iso City.

http://www.kennethfejer.com/isocity/

und so sieht es aus:

Bild

Iso finde ich auch voll cool.

Gruß, Steffen

_________________
Bild


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Zu viel vorm Bildschirm gesessen?
BeitragVerfasst: 08.02.2020 22:51 
Offline
Benutzeravatar

Registriert: 21.07.2005 00:02
Wohnort: am schönen Niederrhein
Hatte damals da so einige Stunden mit stöbern verbracht und wollte mal wieder in Erinnerungen schwelgen. :mrgreen:

Weiß zufällig jemand, ob's die Bilddateien noch irgendwo online gibt ... oder ... hat die evtl. noch jemand auf seiner Platte?

_________________
[Dynamic-Dialogs] - komplexe dynamische GUIs einfach erstellen
[DeFlicker] - Fenster flimmerfrei resizen
[WinFX] - Window Effekte (inkl. 'durchklickbares' Window)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Zu viel vorm Bildschirm gesessen?
BeitragVerfasst: 09.02.2020 09:11 
Offline
Benutzeravatar

Registriert: 20.04.2006 09:50
Viel Spaß 8)
http://www.wannabephoenix.de/instant_pics/LOVEPIXEL.zip

_________________
my pb stuff..
Bild..jedenfalls war das mal so.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Zu viel vorm Bildschirm gesessen?
BeitragVerfasst: 09.02.2020 10:25 
Offline
Benutzeravatar

Registriert: 21.07.2005 00:02
Wohnort: am schönen Niederrhein
#NULL hat geschrieben:
Viel Spaß 8)

Super klasse ... vielen lieben Dank.

Das Ding ist einfach super ... da kann man stöbern bis zum Abwinken. :mrgreen:

Kaum vorzustellen, wie viele Stunden, Wochen, Monate der an dem Bild gesessen haben muss.

_________________
[Dynamic-Dialogs] - komplexe dynamische GUIs einfach erstellen
[DeFlicker] - Fenster flimmerfrei resizen
[WinFX] - Window Effekte (inkl. 'durchklickbares' Window)


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 47 Beiträge ]  Gehe zu Seite Vorherige  1, 2, 3, 4, 5

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 5 Gäste


Sie dürfen keine neuen Themen in diesem Forum erstellen.
Sie dürfen keine Antworten zu Themen in diesem Forum erstellen.
Sie dürfen Ihre Beiträge in diesem Forum nicht ändern.
Sie dürfen Ihre Beiträge in diesem Forum nicht löschen.

Suche nach:
Gehe zu:  

 


Powered by phpBB © 2008 phpBB Group | Deutsche Übersetzung durch phpBB.de
subSilver+ theme by Canver Software, sponsor Sanal Modifiye