Create Frameset

Probleme beim Erstellen von 3D-Modellen und Texturen, keine Ahnung womit man Musik macht? Dies ist dein Forum.
Brügge
Beiträge: 359
Registriert: 28.05.2006 16:40
Wohnort: Rheine

Create Frameset

Beitrag von Brügge »

hi PureBoard!

Xaby hat etwas tiefer auf eine seite hingewiesen -> http://reinerstileset.4players.de/3DbuildingsE.html

dort kann man 2D bilder von allem möglichem bekommen...

ich habe mir das mal angeguckt und gesehen, dass alle Bilder von einer Animation einzelnt abgespeichert sind.

für einen programmierer ist das ja nicht so schön wenn man pro bewegung 8 bis 11 bilder einbinden muss...

deshalb habe ich ein kleines programm geschrieben, was aus den 8 oder 11 bildern ein bild macht, das man dann clippen kann...

Code: Alles auswählen


Global DateiName.s
Global Ordner.l
Global DateiName.s
Ordner = MessageRequester("Clipersteller 1.0 by Bruegge", "wollen sie zu jedem Clip einen Ordner erstellen?", #PB_MessageRequester_YesNo)
DateiName = PathRequester(Titel$, UrsprungsPfad$)

If Ordner = #PB_MessageRequester_Yes :Ordner = 1 :Else : Ordner = 0:EndIf



Global Dim liste.s(1000)
Global Dim liste2.s(1000,1)

Procedure.s getDirectory(text.s)
  Text1.s = UCase(text)
  Text2.s = LCase(text)
  text = ""
  
  For i = 1 To Len(text1.s)
    If Mid(text1.s,i,1) <> Mid(text2.s,i,1)
      text = text +Mid(text2.s,i,1)
    EndIf
  Next i
  
  text = Left(text,Len(text)-3)
  
  ProcedureReturn text
EndProcedure


Procedure listefuellen()
  If ExamineDirectory(0, DateiName, "*.*")  
    i = 0
    While NextDirectoryEntry(0)
      If DirectoryEntryType(0) = #PB_DirectoryEntry_File
        If DirectoryEntryName(0) <> "Thumbs.db"
          liste(i) = DirectoryEntryName(0)
          i = i +1
        EndIf
      EndIf    
    Wend
    FinishDirectory(0)
  EndIf
EndProcedure

Procedure createLog(ort.s,Anzahl.l,laenge.l,hoehe.l)
  OpenFile(0,ort+"\info.log")
    WriteStringN(0,Str(Anzahl))
    WriteStringN(0,Str(laenge))
    WriteStringN(0,Str(hoehe))
  CloseFile(0)
EndProcedure

Procedure.s erhoehen(Text.s,zahl.l)
  Text1.s = UCase(text)
  Text2.s = LCase(text)
  Text = ""
  hilfsvariable = 1

  For i = 1 To Len(text1)
    If Mid(text1,i,1) <> Mid(text2,i,1) Or Mid(text1,i,1) = "." Or Mid(text1,i,1) = "\"Or Mid(text1,i,1) = "/"Or Mid(text1,i,1) = " "
      If hilfsvariable = 1
        Teil1.s = teil1.s + Mid(text2,i,1)
      Else
        teil3.s = teil3.s +Mid(text2,i,1)
      EndIf
    Else
      teil2.s = teil2.s +Mid(text2,i,1)
      hilfsvariable = 0
    EndIf
  Next i

  t2laenge.l =Len(teil2.s)
  t2lang = t2laenge - Len(Str(zahl)) 
  
  neuzahl.s = ""
  For i = 1 To t2lang
    neuzahl.s = neuzahl.s + "0"
  Next i
  
  ProcedureReturn teil1.s+neuzahl.s+Str(zahl)+teil3.s

EndProcedure

Procedure Createclipimage()
  For i = 0 To 1000
    If liste2(i,0)<> ""
      For j = 1 To Val(liste2(i,1))
        Debug erhoehen(liste2(i,0),j-1)+"<--"
        LoadImage(j,Dateiname+erhoehen(liste2(i,0),j-1))
      Next j
      
      CreateImage(0,ImageWidth(1)*Val(liste2(i,1)),ImageHeight(1))
      
      StartDrawing(ImageOutput(0))
        For j = 1 To Val(liste2(i,1))
          DrawImage(ImageID(j),ImageWidth(j)*(j-1),0)
        Next j
      StopDrawing()
      
      If Ordner = 1
        CreateDirectory(DateiName+getdirectory(liste2(i,0)))
        Debug Dateiname+getdirectory(liste2(i,0))+"\"+getdirectory(liste2(i,0))+".png"
        Debug SaveImage(0,Dateiname+getdirectory(liste2(i,0))+"\"+getdirectory(liste2(i,0))+".bmp")
      Else
        Debug SaveImage(0,Dateiname+getdirectory(liste2(i,0))+".bmp")
      EndIf
            
      createLog(Dateiname+getDirectory(liste2(i,0)),Val(liste2(i,1)),ImageWidth(1),ImageHeight(1))
    EndIf
  Next i

EndProcedure


listefuellen()
l2 = 0
For i = 0 To 1000
  If liste(i)<>""
    Debug liste(i)
    head.s = getdirectory(liste(i))
    zaehler = 1
    While(getdirectory(liste(i+zaehler)) = head.s)
        zaehler = zaehler + 1
    Wend
    liste2(l2,0) = liste(i)
    liste2(l2,1) = Str(zaehler)
    i = i + zaehler -1
    l2 = l2 +1
  EndIf
Next i

For i = 0 To 1000
  If liste2(i,0) <> ""
    Debug liste2(i,0)+"   :    "+liste2(i,1)
  EndIf
Next i


createclipimage()

das programm macht folgendes...

man gibt einen ordner an, dann kann man entscheiden ob man die einzelnen clips in einem ordner haben will oder nicht... (wie man will)

das programm geht jetzt alle bilder durch und sortiert die zuerst (welche gehören zusammen) danach speichert es die bilder in ein neues bild.

wer will kann dieses programm auch für andere sachen nutzen.

ich hoffe ich konnte jemanden weiterhelfen.... :roll:

MFG Brügge
Zuletzt geändert von Brügge am 19.06.2008 18:20, insgesamt 1-mal geändert.
Abgeschlossene games: No Name Game (NNG) Download-Link:
http://web56.login-1.loginserver.ch/eas ... 2125104111
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Re: Create Clipe Sprite

Beitrag von Kaeru Gaman »

Brügge hat geschrieben:für einen programmierer ist das ja nicht so schön wenn man pro bewegung 8 bis 11 bilder einbinden muss...
das ist absolut Geschmackssache.
eine Menge Game-Programmierer haben lieber einzelne Frames.

läßt sich ganz anders verwalten, braucht keine extra-berechnungen zum clippen,
und braucht auch nicht mehr speicher, unter Umständen sogar weniger:
wenn das bild unterschiedlich viel von dem Bereich ausfüllt,
kann man bei einzelbildern den Rand entfernen und mit einer Offset-Tabelle arbeiten.
dadurch spart man effektiv einges an Platz im Grafik-Ram.


btw:
Änder mal deinen Titel.
sowas nennt man nicht "Clipsprite" das ist ein "Frameset",
bzw ein "Tileset" wenn es um Tiles und nicht um Animationsframes geht.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Brügge
Beiträge: 359
Registriert: 28.05.2006 16:40
Wohnort: Rheine

Beitrag von Brügge »

ahh gut zu wissen!

aber ich find es einfacher eben das mit einem Frameset zu machen, dann muss man sich nicht so viele nummern merken ^^

wer es nicht will braucht es ja nicht nutzen

mfg brügge
Abgeschlossene games: No Name Game (NNG) Download-Link:
http://web56.login-1.loginserver.ch/eas ... 2125104111
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

merken tut sich die eh keiner.... xD

aber man kann sich nen automaten schreiben,
der die gleich groß gerenderten frames einlädt, den Rand abschneidet,
das neu speichert und das x/y-offset der oberen linken ecke in eine Datei schreibt.
die datei kann man per include ins programm einbinden oder DataZeilen draus machen.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Antworten