Hi
Übersicht

HiBetreff: Hi |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ich hab da mal ein problem und zwar möchte ich aus einer tile datei (also ein bild mit vielen aneinanderhängenden tiles) alle tiles einzeln in Variablen speichern.
Natürlich hab ich es schon mit grabimage , copyrect usw versucht aber es fuktioniert einfach nicht. Das ganze soll dazu dienen einen einfachen tile editor anzupassen damit ich ihn für mein aktuelles projet nutzen kann. |
||
![]() |
hecticSieger des IS Talentwettbewerb 2006 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Einzelne Variablen sollte man nicht benutzen dafür. Lade dein Bild mit ql:LoadAnimImage und zeichne dann mit dem Parameter Frame von ql:DrawImage das Teilbild ein, welches zu haben willst. | ||
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D |
Hi |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ja das wäre ja sinnvoll aber der editor nutzt einzelne tiles und ich weiss nicht wie ich ihn umschreiben soll
also wollte ich an den einzelnen tiles festhalten und dazu muss ich die tiles aus der datei rauskopieren Code: [AUSKLAPPEN] Graphics 800,600,16,1 SetBuffer BackBuffer() Global ende;solange ende=0 ist, läuft das Programm Global mx,my;Position der Maus. So müssen wir im Programm nur einmal den Befehl MouseX(),MouseY() benutzen und können dasn mx,my benutzen Global c=2;c gibt an, welche Geländeart gerade gewählt ist(1=Wasser,2=Wiese,3=Feuer,4=Sand) Global datei;Benötigt man beim Speichern. ERklährt sich weiter unten von selbst(Wissen wie man Speichert vorausgesetzt) Dim grafik(4);Hier werden die Grafiken für Wasser,Wiese,Feuer,Sand gespeichert. Der RPG TutorialSChöpfer macht das anders, aber das ist fast genauso, nur das er alle Grafiken in einem BMP anstatt in 4 speichert. ;laden der Grafiken For x=1 To 4 grafik(x)=LoadImage("tile"+Str$(x)+".bmp") Next Dim map(10,10);die map ist ja bekanntlich nur eine Art Schachbrett(10*10 Felder groß) For y=0 To 9 For x=0 To 9 map(x,y)=1;Jedes Feld wird auf 1 gesetzt, damit am Anfang jedes Feld Wasser ist(1 steht für Wasser) Next Next While ende=0;solange ende=0 ist läuft das Programm Cls;bilschirm wird gelöscht If KeyHit(1)Then;wenn ESC gedrückt wird ;speichern der Map ;hier benötigt man das Wissen, wie man etwas Speichert. datei=WriteFile("map.dat");Pfad For y=0 To 9 For x=0 To 9 WriteLine datei,map(x,y);Für jedes Feld der Map wird die Zahl gespeichert, die wir dem Feld mit dem Editor übergeben haben. Wenn man die Karte dann laden möchte, muss man für jedes Feld eines Arreys diese Zahl laden(seht ihr in dem anderen Programm) Next Next CloseFile datei ; ende=1;Ende ist gleich 1. Dadurch wird das Programm beendet. End If ;mit den Tasten 1-4 wählt man eine Geländeart(Wasser,Wiese,...) If KeyHit(2)Then c=1 If KeyHit(3)Then c=2 If KeyHit(4)Then c=3 If KeyHit(5)Then c=4 If MouseHit(2)Then;Wenn rechte Maustaste gedrückt wird, soll durchgescrollt werden c=c+1;c wird um eins erhöht. Bewirkt das Durchschalten mit der Rechten Maustaste durch die Geländearten(wahlweise anstatt der Tasten 1-4) If c=5 Then c=1;Wenn c=5 ist, muss es wider 1 sein, weil wir keine Geländeart 5 haben End If ;zeigerkoordinaten If MouseX()<10*30 Then mx=MouseX()/30;Solange sich die maus in unserem 10*10 großen Feld befindet, ist mx,my=die Mausposition If MouseY()<10*30 Then my=MouseY()/30;es muss durch 30 dividiert werden, weil jedes unserer Felder nicht 1 sondern 30 Pixel groß ist. ; If MouseDown(1) Then;wenn linke Maustaste gedrückt wird map(mx,my)=c;Das Feld der map, an der sich die Maus befindet, wird auf die Zahl unserer ausgewählten Geländeart gesetzt. Auf der Stelle der Map befindet sich dann die Geländeart. End If ; For y=0 To 9 For x=0 To 9 DrawBlock grafik(map(x,y)),x*30,y*30;Die Karte wird gemalt. Und zwar die Grafik für die Nummer, die in dem Feld gespeichert ist(1 für Wasser,...). *30, weil die einzelnen Kacheln(Grafiken für die Geländeart) ja im Abstand von 30 Pixeln gemalt werdne sollen Next Next ; ;Eine Art Cursor wird gemalt. Der sieht aus, wie die ausgewählte Geländeart DrawBlock grafik(c),mx*30,my*30 Color 255,0,0 Rect mx*30,my*30,30,30,0;Ein Rotes, lehres Rechteck wird um den Corsor gemalt ; ;Anweisungen während des Editors Text 400,50,"Rechte Maustaste/Tasten 1-4 zum wechseln" Text 400,100,"Linke Maustaste zu editieren" Text 400,150,"1:Wasser" Text 400,200,"2:Wiese" Text 400,250,"3:Feuer" Text 400,300,"4:Sand" Flip Wend End Daher wird die methode nicht funktionieren soweit ich weiss |
||
![]() |
hecticSieger des IS Talentwettbewerb 2006 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Schaue dir mal ql:DrawImage genau an, bevor du versuchst etwas zu programmieren, was du noch nicht ganz verstanden hast. Wenn du Fremdcode nimmst und ihn nicht ganz verstehst, dann versuche ihn zu verstehen, denn sonst wirst du nicht weit kommen. Und ein Tileeditor ist das einfachste was man so machen kann.
In deinem genannten Beispiel wird ein Dimfeld angelegt und in diesem dann die einzelnen Bilder eingeladen. |
||
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D |
Hi |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ja nur werden da 4 EINZELNE bilder geladen ich habe aber EIN bild und in diesem bild sind 282 tiles vorhanden
ich habe Drawimage sehr wohl verstanden und weiss das du darauf hinaus willst dass ich die framezahl am ende nutzen soll aber dadurch kann ich ja nicht den wert des tiles speichern um das selbe prinzip zu nutzen wie es in dem editor gemacht wird muss ich also das bild mit den 282 tiles in 282 einzelne bilder aufteilen und das ist alles was ich wissen wollte um es nochmal als frage zu formulieren: wie teile ich das bild mit 282 tiles auf und speichere dann jedes tile in eine variable? |
||
![]() |
BigMaexle |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ist vll der Befehl ql:Drawimagerect das was du suchst? | ||
--------------------------------------
Ich bin unfreiwillig ein Mitglied dieser kapitalistischen Gesellschaft, wo jeder Geldgeile Unternehmer an mein Geld will und ich selbst bei meinen Entscheidungen so gut wie willenlos bin...... und ich bin glücklich drüber |
![]() |
hecticSieger des IS Talentwettbewerb 2006 |
![]() Antworten mit Zitat ![]() |
---|---|---|
@Hi, ich glaube nicht das du weißt worauf ich hinaus wollte. Du brauchst nicht für jedes Tile eine Variable zu speichern. Es reicht wenn du im Editor auf Position X,Y einfach nur einen Wert abspeicherst, der die Framezahl wiedergibt. Es kommt letztendlich auf das selbe hinaus. Was du vor hast wird nicht nur unnötig viele Dateien benötigen, was das handling sehr kompliziert macht, sondern wird auf einem Computer auch mehr Recourcen fressen.
Dein blöder Editor macht folgendes: Speichert auf einem 2D-Array jeweils in jeder Position die Variablennummer des Images. Die Varaiblennummern wurden auch in ein Array gespeichert wo einzelnd Bilder rein geladen (Handle) wurde. Mein Vorschlag würde folgendes machen: Speichert auf einem 2D-Array jeweils in jeder Position die Indexnummer des Mainimages. Die Indexnummer gibt an, welches Teilbild angezeigt werden soll. Dabei wird nur ein Bild geladen. Um deine Euphorie mal einzugrenzen. Ich habe schon viele Editoren geschrieben und alle funktionierten sehr gut. Einen Tileeditor zu schreiben, brauche ich ~5-10min und sollte wirklich kein Ding sein. Wenn du nichtmal deinen Tileeditor verstehst, dann solltest du zunähst was einfacheres machen. |
||
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group