Suche einen MapEditor

Du brauchst Grafiken, gute Programme oder Leute die dir helfen? Frag hier.
Benutzeravatar
Zaphod
Beiträge: 2875
Registriert: 29.08.2004 00:40

Beitrag von Zaphod »

vor allem ist kaerus variante nicht nur einfacher, sondern auch besser schneller und überhaupt einfach richtiger ;)
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

SlapY hat geschrieben:Ho,
weisst du was....Interessiert mich nich. Kann ich später ändern...wenn ichs brauch.
nunja, der freundlichste war er ja von anfang an nicht...
SlapY hat geschrieben:Hiho :mrgreen: ,
ich brauche Jemanden der mir einen kleinen MapEditor proggen
kann...
...
Wäre nett wenn Mir das Jemand machen könnte...weil ich hab keine Zeit..und kanns auch nich ^^° :lol: :roll: :wink: .
wegen dieses tons wollte ich eigentlich hier garnix schreiben...

aber ich konnte es dann doch nicht lassen, ihn auf einen existentiellen mißstand hinzuweisen.

aber ber der reaktion...

weisst du was, SlapY, leck mich doch!

von mir bekommst du erst wieder geholfen, wenn du dich gebessert hast...
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
SlapY
Beiträge: 47
Registriert: 08.01.2005 20:57

Beitrag von SlapY »

ho,
Ich übe ja noch...Aber ich werde es ändern
Zuletzt geändert von SlapY am 16.02.2005 17:55, insgesamt 2-mal geändert.
glubschi90
Beiträge: 274
Registriert: 04.09.2004 01:43
Wohnort: Würzburg

Beitrag von glubschi90 »

@SlapY
Die Umgehensweise find' ich auch nicht ganz in Ordnung...

Zu dieser Lade-Geschichte:
Ic hab' das in dem Mapeditor genauso gemacht...
Dachte, Du hättest dich verschrieben :mrgreen:

Ich kann dir den Code im Moment nicht geben, bin bei meiner Mutter auf der Arbeit.
Später kommt er aber...

EDIT:
@SlapY
WOW!
Das war aber ne harte Reaktion... fin'd ich nicht so dolle...
Zuletzt geändert von glubschi90 am 16.02.2005 17:52, insgesamt 3-mal geändert.
PureBasic 4.30
Benutzeravatar
SlapY
Beiträge: 47
Registriert: 08.01.2005 20:57

Beitrag von SlapY »

Hi^,
Okok......Syr Kaeru,Syr Blue,Syr andere...^^ ich werd das denn auchmal ändern....
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Beitrag von Kiffi »

@SlapY: Mit solch einem Verhalten kommst Du hier in dem Board nicht weiter.
a²+b²=mc²
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

SlapY hat geschrieben:Ne erlich: ich übe ja noch.....
was übst du noch... soziale verhaltensweise?

ich werde niemals jemanden dumm anmachen,
wenn er beim programmieren nen denkfehler macht! *
wir haben alle mal angefangen...

aber eine solche unhöflichkeit tut nich not...

* falls jetzt jemand meint, sich anders zu erinnern (DD?):
auch in jenen fällen war es die verhaltensweise, nicht der code...

[EDIT]
SlapY hat geschrieben:...Syr Kaeru...
ok... akzeptiert... (btw: write it "Sry" :wink: )
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
SlapY
Beiträge: 47
Registriert: 08.01.2005 20:57

Beitrag von SlapY »

Hi,
also:
1. Ich habe gerade erst angefangen.

2. Hab ich das ja selber gemacht ....und deshalb mag ichs nicht wenn mir da Leute reinreden die ich nicht kenne (Sry :) )..... Kennst du das nicht....Du machst Etwas alleine (im meinem fall mit hilfe der Hilfe(^^)) ohne irgendjemand der dir sagt was gut ist und was nicht .....und dann kommt da Einer und erzählt dir sachen die du nicht verstehst.

Geklärt? Also nochmal: SRY an alle!

So
Bye
Slap :)

Ps: Wenns geht und du noch lust hat: Könntest du es mir plz nochmal erklären? :) Oder sonst jemand? :)
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

SlapY hat geschrieben:2. Hab ich das ja selber gemacht ....und deshalb mag ichs nicht wenn mir da Leute reinlabern die ich nicht kenne..... Kennst du das nicht....Du machst Etwas alleine (im meinem fall mit hilfe der Hilfe(^^)) ohne irgendjemand der dir sagt was gut ist und was nicht .....und dann kommt da irgendeiner und labert dich voll mit sachen die du nicht verstehst.
das versteh ich natürlich...

... und tatsächlich habe ich auch verständnis für deine 'übertriebene' reaktion,
schliesslich weiss ich nicht, wer dir vorher auf die zehen getreten ist. :wink:

ich reagier manchmal auch so überempfindlich, aber ich muss auch immer das echo verkraften :wink:

ok.. nochmal erklären...

da du eine MAP hast, ist eigentlich logisch, das jede 'Kachel' (Tile) genau eine information besitzt.
diese kann später mehr enthalten, als die bmp-nr, aber fürs erste ist das ausreichend.

in deinem fall hast du vorerst eine 40x30 Map, also machst du ein array mit
Dim Map.l(39,29) <-(besonderheit bei PB: nicht gesamtanzahl sondern höchster index)

in diesem array steht nun für jedes Tile die BMP-Nr.

der vorteil:
1) du kannst sie mit zwei geschachtelten schleifen einlesen, auslesen und anzeigen,
2) du brauchst nur einen wert für jedes feld.

arbeite ruhig von anfang an mit LONG-werten (32bit), du wirst zwar kaum
mehr als 256 verschiedene Tiles benötigen, aber so hast du noch platz für
spätere erweiterungen, sprich flags, ereignisse, etc.

in meinem beispiel hab ich vorweg genommen, dass du später
vielleicht verschieden grosse Maps benutzen möchtest.
dafür stehen dann halt am beginn jeder Map-datei die dimensionen,
damit du dein array aktuell anpassen kannst.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
glubschi90
Beiträge: 274
Registriert: 04.09.2004 01:43
Wohnort: Würzburg

Beitrag von glubschi90 »

So, fertig:

Das Programm brauct keine Ressourcen (außer deine Tiles)
Den Pfad zu den Tiles musst du angeben (ist im Code mit #### markiert)

Das aktuelle Tile kannst du mit dem Mausrad oder den Pfeilbuttons wechseln

(Und sorry, wenn der Code etwas unübersichtlich und nicht soo sauber ist... ich kenn mich in meinem "Wust" abba bestens aus ;-) )

Code: Alles auswählen

LoadFont(0,"Arial",10)

If InitSprite()=0:End:EndIf
If InitMouse()=0:End:EndIf
If InitKeyboard()=0:End:EndIf

id=OpenScreen(800,600,32,"Map-Editor")

Global MouseTimeOut, Info.s
Dim Map(39,29)
gitter=1
IPBoxTXT.s
Info="Willkommen!"

;##############################################################
#SavePath="P:\" ; <- Muss ggf angepasst werden!
#TilesPath="P:\Tests\gfx\" ; <- Muss auch angepasst werden!
#NumOfTiles=4 ; <- Anzahl der Bitmapdateien
;##############################################################

;{Maptiles laden
For i=1 To #NumOfTiles
  If LoadSprite(i-1,#TilesPath+Str(i)+".bmp")=0
    CloseScreen()
    MessageRequester("Fehler","Konnte Datei: "+Str(i)+".bmp nicht laden",#MB_ICONERROR)
    End
  EndIf
Next
;}

Enumeration #NumOfTiles+1
  #Mouse
  #Arrow_L
  #Arrow_R
EndEnumeration

;{-Sprites erstellen
CreateSprite(#Arrow_L,30,30)
StartDrawing(SpriteOutput(#Arrow_L));{
FrontColor(0,255,200)
LineXY(0,15,10,0)
LineXY(0,15,10,30)
Line(10,0,0,30)
FillArea(5,15,RGB(0,255,200))
Box(10,10,20,10)
StopDrawing();}

CreateSprite(#Arrow_R,30,30)
StartDrawing(SpriteOutput(#Arrow_R));{
FrontColor(0,255,200)
LineXY(30,15,20,0)
LineXY(30,15,20,30)
Line(20,0,0,30)
FillArea(25,15,RGB(0,255,200))
Box(0,10,20,10)
StopDrawing();}

CreateSprite(#Mouse,30,30)
TransparentSpriteColor(#Mouse,0,255,0)
StartDrawing(SpriteOutput(#Mouse));{
Box(0,0,30,30,RGB(0,255,0))
FrontColor(0,0,0)
Line(0,0,0,30)
Line(0,0,30,0)
LineXY(0,30,30,0)
FillArea(10,10,0,$FFFFFF)
StopDrawing();}
;}



Procedure MouseKlick()
  ret=0
  If MouseTimeOut=0 And MouseButton(1)
    MouseTimeOut=1
    ret=1
  EndIf
  ProcedureReturn ret
EndProcedure

Procedure RectPointOverlap(x,y,w,h,px,py)
  ret=0
  If px>=x And px<=x+w And py>=y And py<=y+h
    ret=1
  EndIf
  ProcedureReturn ret
EndProcedure

Procedure Timer()
  Repeat
    Delay(60000) ; = 60sek
    If CreateFile(0,#SavePath+"AutoSave")
      For x=0 To 39
        For y=0 To 29
          WriteByte(Map(x,y))
        Next
      Next
      CloseFile(0)
      Info="-Automatisches Speichern-"
    Else
      Info="-Konnte nicht automatisch speichern!-"
    EndIf
  ForEver
EndProcedure


SetFrameRate(60)

CreateThread(@Timer(),0)

Repeat
  
  ExamineMouse():ExamineKeyboard()
  mx=MouseX():my=MouseY()
  
  
  ;-Sprites
  
  ;Map
  
  For x=0 To 39
    For y=0 To 29
      DisplaySprite(Map(x,y),x*16,y*16)
    Next
  Next
  
  ;Menü
  
  DisplayTransparentSprite(#Arrow_L,10,530)
  DisplayTransparentSprite(#Arrow_R,100,530)
  DisplaySprite(CurrentSprite,60,535)
  
  ;-Drawing
  
  StartDrawing(ScreenOutput())
  DrawingFont(FontID())
  
  DrawingMode(1)
  
  If gitter

  FrontColor(255,0,0)
  For x=1 To 40
    Line(x*16,0,0,480)
  Next
  For y=1 To 30
    Line(0,y*16,640,0)
  Next
  EndIf
  
  
  FrontColor(255,255,255)
  Locate(55,510):DrawText("Tile")
  
  Locate(660,20)
  If gitter=1
  DrawText("Gitternetz: an")
  Else
    DrawText("Gitternetz aus")
  EndIf
  
  Locate(660,40):DrawText("-Leertaste zum Ändern-")
  
  Locate(220,535):DrawText("Dateiname:")
  Box(300,530,300,20)
  
  
  FrontColor(0,255,200)
  
  Box(300,560,145,20)
  Box(455,560,145,20)
  
  Box(620,530,170,20,13107400)
  
  
  FrontColor(0,0,0)
  
  Locate(305,532):DrawText(IPBoxTXT)
  
  Locate(305,562):DrawText("Speichern")
  Locate(460,562):DrawText("Laden")
  
  Locate(622,532):DrawText(Info)
  
  Locate(622,562):DrawText("Map-Editor by glubschi90")
  
  If IPBox=1
    Box(307+TextLength(IPBoxTXT),532,4,16)
  EndIf
  
  
  
  DrawingMode(4)
  Box(mx+15,my+15,19,19,16711680)
  Box(mx+16,my+16,17,17,16711680)
  StopDrawing()
  
  
  ;-Abfragen
  If KeyboardReleased(#PB_Key_Escape)
    quit=1
  EndIf
  
  If KeyboardReleased(#PB_Key_Space)
    If gitter=1
      gitter=0
    Else
      gitter=1
    EndIf
  EndIf
  
  ;Maus abfragen
  
  MKlick=MouseKlick()
  
  If mx<640 And my<480
    If MouseButton(1)
      Map(mx/16,my/16)=CurrentSprite
    EndIf
  EndIf
  
  If MouseWheel()>0 And CurrentSprite>0
      CurrentSprite-1
  EndIf
  If MouseWheel()<0 And CurrentSprite<#NumOfTiles-1
    CurrentSprite+1
  EndIf
  
  
  If RectPointOverlap(300,530,300,20,mx,my)
    If MKlick
      IPBox=1
    EndIf
  Else
    If MKlick
      IPBox=0
    EndIf
  EndIf
  
  If RectPointOverlap(300,560,145,20,mx,my) And MKlick ;-Speichern
    If IPBoxTXT<>""
      If CreateFile(0,#SavePath+IPBoxTXT)
        For x=0 To 39
          For y=0 To 29
            WriteByte(Map(x,y))
          Next
        Next
      CloseFile(0)
      Info="Datei gespeichert!"
    Else
      Info="Konnte Datei nicht speichern!"
    EndIf
    Else
      Info="Bitte Dateinamen angeben."
    EndIf
  EndIf
  
  
  If RectPointOverlap(460,560,145,20,mx,my) And MKlick ;-Laden
    If IPBoxTXT<>""
      If ReadFile(0,#SavePath+IPBoxTXT)
        For x=0 To 39
          For y=0 To 29
            Map(x,y)=ReadByte()
          Next
        Next
        CloseFile(0)
        Info="Datei geladen!"
      Else
        Info="Konnte Datei nicht laden!"
      EndIf
    Else
      Info="Bitte Dateinamen angeben."
    EndIf
  EndIf
  
  
  If RectPointOverlap(10,530,30,30,mx,my) And MKlick=1 And CurrentSprite>0
    CurrentSprite-1
  EndIf
  If RectPointOverlap(100,530,30,30,mx,my) And MKlick=1 And CurrentSprite<#NumOfTiles-1
    CurrentSprite+1
  EndIf

  
  ;InputBoxen
  If IPBox=1
    IPBoxTXT+KeyboardInkey()
    If KeyboardReleased(#PB_Key_Back)
      IPBoxTXT=Left(IPBoxTXT,Len(IPBoxTXT)-1)
    EndIf
  EndIf
  
  ;Mausoptionen
  If MouseTimeOut>0
    If MouseTimeOut=10
      MouseTimeOut=0
    EndIf
    MouseTimeOut+1
    If MouseButton(1)=0
      MouseTimeOut=0
    EndIf
  EndIf
  
  ;Maus
  DisplaySprite(CurrentSprite,mx+16,my+16)
  DisplayTransparentSprite(#Mouse,mx,my)
  FlipBuffers()
  ClearScreen(0,100,100)
  
Until quit=1
Zuletzt geändert von glubschi90 am 17.02.2005 14:55, insgesamt 1-mal geändert.
PureBasic 4.30
Antworten