Seite 2 von 4

Verfasst: 16.02.2005 17:38
von Zaphod
vor allem ist kaerus variante nicht nur einfacher, sondern auch besser schneller und überhaupt einfach richtiger ;)

Verfasst: 16.02.2005 17:39
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...

Verfasst: 16.02.2005 17:45
von SlapY
ho,
Ich übe ja noch...Aber ich werde es ändern

Verfasst: 16.02.2005 17:48
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...

Verfasst: 16.02.2005 17:51
von SlapY
Hi^,
Okok......Syr Kaeru,Syr Blue,Syr andere...^^ ich werd das denn auchmal ändern....

Verfasst: 16.02.2005 17:52
von Kiffi
@SlapY: Mit solch einem Verhalten kommst Du hier in dem Board nicht weiter.

Verfasst: 16.02.2005 17:54
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: )

Verfasst: 16.02.2005 18:01
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? :)

Verfasst: 16.02.2005 18:16
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.

Verfasst: 16.02.2005 20:33
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