Iso-Tutorial *UPDATE*

Übersicht BlitzMax, BlitzMax NG FAQs und Tutorials

Neue Antwort erstellen

beanage.johannes

Betreff: Iso-Tutorial *UPDATE*

BeitragFr, Dez 25, 2009 19:16
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi.
Habe mal wieder ein kleines Tutorial geschrieben (hoffe diesmal sind nicht so viele Rechtschreibfehler drinnen Wink )
Diesmal geht es um das Thema Iso.
Viel Spaß beim lesen.

--------------------------------------------------------------------------------------------------------------------------------------
Iso Tutorial

In diesem Tutorial werde ich nur eine Art von Iso-maps behandeln, und zwar rechteckige (nicht rautenförmige) Maps (1).
Die Kollision wird nicht über Berechnungen geprüft, sondern pixelgenaue Kollision benutzen, das hat den Vorteil das Tiles die hoch sind, wie z.b. Bäume nicht nur am boden angeklickt werden können sondern auch an der Krone, die über den bereich des "mutter-Tiles" hinaus geht, aber dazu später.

1 Rechteckige Iso-Map
user posted image

Zu beginn brauchen wir ein kleines Tileset mit der größe 32x15 Pixel (2).
Bei isometrischen Tiles ist es wichtig das diese "ineinander greifen" können ohne sich zu verdecken, falsch währe es so (3) das würde zwar Funktionieren ergäbe aber ein hässliches end-Bild.
Näheres zu Iso-Pixeln [Link Entfernt]
Das könnte dann ungefähr so (4) aussehen.

2 Iso-Feld (32x15)
user posted image

3 Iso-Feld Falsch (32x16)
user posted image

4 Tileset
user posted image

Nun zum eigentlichen, dem Code.
Wir brauchen ert einmal einen Type den wir "TTile" nennen.
Der Type soll dann so (liste) aussehen.

    • X position
    • Y Position
    • H Position
    • Material
    • seter/geter Methoden
    • Create Funktion
    • Draw Methode


Hier der richtige Code des Types.
BlitzMax: [AUSKLAPPEN]

Type TTile

Global _width:Int = 32 'breite des Tiles
Global _height:Int = 15 'höhe des Tiles

Field _xPos:Int 'x-position
Field _yPos:Int 'y-position
Field _hPos:Int 'h-position (höhe)

Field _material:Int 'material (frame nummer)

'seter (Ich glaube zu denen muss ich nichts sagen, oder?)

Method setXPos( xPos:Int )

_xPos = xPos

EndMethod

Method setYPos( yPos:Int )

_yPos = yPos

EndMethod

Method setHPos( hPos:Int )

_hPos = hPos

EndMethod

Method setMaterial( material:Int )

_material = material

EndMethod

'geter (Ich glaube zu denen muss ich auch nichts sagen)

Method getXPos:Int()

Return _xPos

EndMethod

Method getYPos:Int()

Return _yPos

EndMethod

Method getHPos:Int()

Return _hPos

EndMethod

Method getMaterial:Int()

Return _material

EndMethod

'functions / methods

Function Create:TTile( xPos:Int,yPos:Int,hPos:Int,material:Int )

Local n:TTile = New TTile 'neues TTile objekt erstellen

n.setXPos( xPos ) 'x-position übergeben
n.setYPos( yPos ) 'y-position übergeben
n.setZPos( hPos ) 'h-position übergeben
n.setMaterial( material ) 'material-nummer übergeben

Return n 'fertiges TTile zurückgeben

EndFunction

Method draw() 'diese Methode wird unter dem Code besprochen

DrawImage tileset,_xPos * zoom - (scrollX*TTile._width), _yPos * zoom - _zPos - (scrollY*TTile._height),_material

EndMethod

EndType


Der Code müsste eigentlich leicht verständlich sein (bis vieleicht auf die Method Draw() die wir aber jetzt nochmal durchgehen werden).

Die Methode Draw() zeichnet ein Tile an seine X-Position und Y-Position.

Die Variablen ScrollX:int und ScrollY:int sind Globale Variablen die die Position des betrachters beinhalten.
Zoom:Float ist auch eine Global die den Zoom beinhaltet (normal 1.0).
Das subtrahieren von (scrollX*TTile._width) bewirkt nur das die Map sich entgegengesetzt zum scrollX beweget -> wird ScrollX größer so bewegt sich die map nachlinks, nicht nach rechts. Das gleiche gilt für (scrollY*TTile._height) nur auf der Y - Achse.

Unsere vielen vielen Tiles die wir später erstellen werden müssen natürlich auch gespeichert werden, hierfür eignet sich vor allem ein 2 dimensionälles Array.

Unser neues Array nennen wir am besten erstmal map.

BlitzMax: [AUSKLAPPEN]

Global Map:TTile [ 256,256 ]


Um unseren Array "Map" zu befüllen schreiben wir eine Funktion namens makeMap() (weil es CreateMap() schon gibt, falls dir ein besserer Name einfällt schreib ihn als Kommentar Wink ).

BlitzMax: [AUSKLAPPEN]

Function newMap()

For Local y:Int = 0 To 255
For Local x:Int = 0 To 255

Local xpos:Int = ((x*TTile._width)+(y Mod 2)*(TTile._width/2)) 'x-position berechnen
Local ypos:Int = (y*(TTile._height/2 + 1)) 'y-position berechnen

map[ x,y ] = TTile.Create( xPos,yPos,0,0 ) 'neues TTile erstellen mit x,y,z,m parametern

Next
Next

EndFunction


So... nun wird es spannend (oder auch nicht) denn jetzt berechnen wir die x und y Position für jedes Tile in der map. Aus performance Gründen tun wir das nicht "live" beim zeichnen der map sondern machen das vorher.
Ob das wirklich viel schneller ist weis ich ehrlich gesagt nicht, aber ich denke es.

Bei der xPos:int wird im Grunde nichts anderes gemacht als das dass Tile immer weiter nach rechts verschoben wird (und zwar um seine eigene Breite). Liegt das Tile aber in einer Graden (2,4,6,8,...) reihen so wird es um seine Hälfte ( (TTile._width/2) ) nach rechts verschoben. Ob es in einer gerade Reihe liegt stellen wir mit ( y Mod 2 ) fest. Trifft dies zu wird es verschoben, dass dient dazu das die Tiles in ein ander greifen.

Bei der yPos:int wird das Tile einfach immer um die Hälfte seiner höhe nach unten verschoben, auch das dient dem in ein ander greifen.

So weit so gut.
Das einzige was uns zu unserem (vieleicht) ersten Iso-app fehlt ist eine Funktion um die Map zu zeichnen bzw die den Array durchgeht und von jedem Object die Methode Draw() aufruft und Dein mein-Loop.
Also... nichts wie rann.

Hier die drawMap() Funktion.
BlitzMax: [AUSKLAPPEN]

Function drawMap()

SetScale( zoom,zoom ) 'scale auf zoom setzen

For Local y:Int = scrollY To scrollY + screenHeight + 1
For Local x:Int = scrollX To scrollX + screenWidth - 1

map[ x,y ].draw() 'TTile.Draw() Methode des jeweiligen Tiles aufrufen

Next
Next

SetScale( 1,1 ) 'scale auf "normal" setzen (1,1)

EndFunction


ohh... fast hätte ich es vergessen... Die Vaibalen maxTilesW:int und maxTilesH:int beinhalten wieviele Tiles dargestellt werden müssen (w,h) damit der Bildschirm voll ist.

Hier nochmal beide Variablen.
BlitzMax: [AUSKLAPPEN]

Global screenWidth:Int = TTile._width / GraphicsWidth()
Global screenHeight:Int = TTile._height / GraphicsHeight()


Nun noch der meinloop.

BlitzMax: [AUSKLAPPEN]

Global mainTimer:TTimer = CreateTimer( 60 )

Repeat
Cls

drawMap() 'Map neu Zeichnen

WaitTimer( mainTimer ) 'auf den Timer warten...

Flip 0
Until AppTerminate() Or KeyDown( key_escape )


Hier nochmal der ganze Code:

BlitzMax: [AUSKLAPPEN]

SuperStrict

Type TTile

Global _width:Int = 32 'breite des Tiles
Global _height:Int = 15 'höhe des Tiles

Field _xPos:Int 'x-position
Field _yPos:Int 'y-position
Field _hPos:Int 'h-position (höhe)

Field _material:Int 'material (frame nummer)

'seter (Ich glaube zu denen muss ich nichts sagen, oder?)

Method setXPos( xPos:Int )

_xPos = xPos

EndMethod

Method setYPos( yPos:Int )

_yPos = yPos

EndMethod

Method setHPos( hPos:Int )

_hPos = hPos

EndMethod

Method setMaterial( material:Int )

_material = material

EndMethod

'geter (Ich glaube zu denen muss ich auch nichts sagen)

Method getXPos:Int()

Return _xPos

EndMethod

Method getYPos:Int()

Return _yPos

EndMethod

Method getHPos:Int()

Return _hPos

EndMethod

Method getMaterial:Int()

Return _material

EndMethod

'functions / methods

Function Create:TTile( xPos:Int,yPos:Int,hPos:Int,material:Int )

Local n:TTile = New TTile 'neues TTile objekt erstellen

n.setXPos( xPos ) 'x-position übergeben
n.setYPos( yPos ) 'y-position übergeben
n.setHPos( hPos ) 'h-position übergeben
n.setMaterial( material ) 'material-nummer übergeben

Return n 'fertiges TTile zurückgeben

EndFunction

Method draw() 'diese Methode wird unter dem Code besprochen

DrawImage tileset,_xPos * zoom - (scrollX*TTile._width), _yPos * zoom - _hPos - (scrollY*TTile._height),_material

EndMethod

EndType

'---------------------

Graphics 640, 480

Global map:TTile [ 256,256 ]

Global scrollX:Int = 0
Global scrollY:Int = 0

Global screenWidth:Int = GraphicsWidth() / TTile._width 'wie viele Tiles diagonal auf den Bildschim passen
Global screenHeight:Int = GraphicsHeight() / TTile._height * 2 'und wie viele horizontal drauf passen

Global zoom:Float = 1

Global mainTimer:TTimer = CreateTimer( 60 )

Global tileset:TImage = LoadAnimImage( "gfx/tileset.png",TTile._width, 64,0,1 ) 'Tileset als AnimImage laden

'mainloop

newMap() 'neue leere Map erstellen

Repeat
Cls

drawMap() 'Map neu Zeichnen

WaitTimer( mainTimer ) 'auf den Timer warten...

Flip 0
Until AppTerminate() Or KeyDown( key_escape )


Function newMap()

For Local y:Int = 0 To 255
For Local x:Int = 0 To 255

Local xpos:Int = ((x*TTile._width)+(y Mod 2)*(TTile._width/2)) 'x-position berechnen
Local ypos:Int = (y*(TTile._height/2 + 1)) 'y-position berechnen

map[ x,y ] = TTile.Create( xPos,yPos,0,0 ) 'neues TTile erstellen mit x,y,h,m parametern

Next
Next

EndFunction

Function drawMap()

SetScale( zoom,zoom ) 'scale auf zoom setzen

For Local y:Int = scrollY To scrollY + screenHeight + 1
For Local x:Int = scrollX To scrollX + screenWidth - 1

map[ x,y ].draw() 'TTile.Draw() Methode des jeweiligen Tiles aufrufen

Next
Next

SetScale( 1,1 ) 'scale auf "normal" setzen (1,1)

EndFunction





--------------------------------------------------------------------------------------------------------------------------------------

Das Tutorial als PDF und Der Code zum Download. Exclamation SEHR VERALTET Exclamation

Iso Tutorial (pdf)
Code Download (zip)

Danke
  • Zuletzt bearbeitet von beanage.johannes am Mo, Jan 11, 2010 1:22, insgesamt 36-mal bearbeitet

beanage.johannes

Betreff: Runde 2 ... Kollision

BeitragFr, Dez 25, 2009 22:46
Antworten mit Zitat
Benutzer-Profile anzeigen
--------------------------------------------------------------------------------------------------------------------------------------
2. Runde - Kollision

Wir machen es uns mit der Kllision / dem Mousemapping etwas schwieriger, dafür wird aber das Resultat besser.
Was wir benutzen werden nennt sich "Deffered Rendering".
Ein Kumpel hat mir das so erklährt:

Zitat:

Jedes objekt hat seine Farbe. Es behält seine Farbe für immer und wird sie niemals einem anderen geben.
Es reagiert wenn du es mit seiner Farbe ansprichst.


Als ich das gehört habe fragte ich mich erstmal was der scheiß soll.
Aber, es ist eig. ganz simpel.

Jedes Tile bekommt seine eigene Farbe.
Klicken wir mit der Maus, schauen wir auf welcher Farbe sich die Maus befindet, und welches Objekt sich hinter dieser Farbe verbirgt.

Um diese merkwürdige sache umzusetzen ,müssen wir erstmal etwas coden, ich erklähre später alles nochmal, denn ich denke wenn du den code liest/abtippst oder auch copy und paste machst verstehst du das ganze besser (bei letzterem vieleicht eher weniger ^^).

Wir brauchen eine Funktion die wir RenderMap() nennen. Diese Funktion zeichnet uns die Map in der jedes Tile eifarbig ist (jedes hat seine Farbe).

Unser Tileset braucht daher an erster position ein Komplett Weißes Tile (1)

1 Neues Tileset
user posted image

BlitzMax: [AUSKLAPPEN]

Function RenderMap()

Cls

SetScale( zoom,zoom ) 'scale auf zoom setzen

For Local y:Int = scrollY To scrollY + screenHeight + 1
For Local x:Int = scrollX To scrollX + screenWidth - 1

SetColor x,y,0 'farbe fü das Objekt setzen

Local mat:Int = map[ x,y ].getMaterial() 'altes Material speichern
map[ x,y ].setMaterial( 0 ) 'Material auf 0 setzten = weißes Tile
map[ x,y ].draw() 'TTile.Draw() Methode des jeweiligen Tiles aufrufen
map[ x,y ].setMaterial( mat ) 'altes material zurück geben

Next
Next

colorMap:TPixmap = GrabPixmap( 0,0,GraphicsWidth(),GraphicsHeight() ) 'Color map "befüllen"

Cls

SetColor 255,255,255

SetScale( 1,1 ) 'scale auf "normal" setzen (1,1)

EndFunction


Wir brauchen zusätzlich noch die Global colorMap:TPixmap

Code: [AUSKLAPPEN]

Global colorMap:TPixmap


Die Funktion Zeichnet die map (mit einem leeren -> nur weißen Tile im Tileset, das an der Position 0 stehen muss) und Färbt jedes Tile Anders ein. Jetzt hat jedes Objekt seine eigene Farbe.
Das sieht dann ungefähr so (2) aus.

2 Colormap
user posted image

Wenn wir klicken müssen wir >>nurnoch<< die Farbwerte an der position es Cursors auf der colorMap bestimmen, und schon wissen wir auf welches Tile wir geklickt haben!

Nichts wie rann.
Um Farbwerte zu bestimmen gibt es 2 methoden, ich habe mal schnell 4 Funktionen geschrieben die das machen (RGBA).

Hier die 4 Funktionen (einfach copy&paste unten ins projekt)

BlitzMax: [AUSKLAPPEN]

Function getPixmapRed:Int(pixmap:TPixmap,x:Int,y:Int)

Local position:Int = ReadPixel(pixmap,x,y)

Return (position Shl 8) Shr 24

EndFunction

Function getPixmapGreen:Int(pixmap:TPixmap,x:Int,y:Int)

Local position:Int = ReadPixel(pixmap,x,y)

Return (position Shl 16) Shr 24

EndFunction

Function getPixmapBlue:Int(pixmap:TPixmap,x:Int,y:Int)

Local position:Int = ReadPixel(pixmap,x,y)

Return (position Shl 24) Shr 24

EndFunction

Function getPixmapAlpha:Int(pixmap:TPixmap,x:Int,y:Int)

Local position:Int = ReadPixel(pixmap,x,y)

Return position Shr 24

EndFunction


Diese Funktionen will ich jetzt nicht besprechen da sie nicht Thema des Tutorials sind.

wir können jetzt schnell und dreckig eine kleine abfrage in den Mainloop integrieren, die könnte so aussehen.

BlitzMax: [AUSKLAPPEN]

If MouseHit( 1 )

Local pixel:Int = ReadPixel( colorMap,MouseX(),MouseY() )

Local x:Int = getpixmapred( colorMap,MouseX(),MouseY() )
Local y:Int = getpixmapgreen( colorMap,MouseX(),MouseY() )

Print "x: " + x + " y: " + y

EndIf


WICHTIG ist aber das wir jedesmal wenn sich auf der map was veränder die Funktion RenderMap() audführen da es sonst zu verfälschten erebnissen kommen kann.
(Die Funktion muss auch am anfang vor dem Mainloop 1. ausgeführt werden!)

Hier nochmal der Ganze Code:

BlitzMax: [AUSKLAPPEN]


SuperStrict

Type TTile

Global _width:Int = 32 'breite des Tiles
Global _height:Int = 15 'höhe des Tiles

Field _xPos:Int 'x-position
Field _yPos:Int 'y-position
Field _hPos:Int 'h-position (höhe)

Field _material:Int 'material (frame nummer)

'seter (Ich glaube zu denen muss ich nichts sagen, oder?)

Method setXPos( xPos:Int )

_xPos = xPos

EndMethod

Method setYPos( yPos:Int )

_yPos = yPos

EndMethod

Method setHPos( hPos:Int )

_hPos = hPos

EndMethod

Method setMaterial( material:Int )

_material = material

EndMethod

'geter (Ich glaube zu denen muss ich auch nichts sagen)

Method getXPos:Int()

Return _xPos

EndMethod

Method getYPos:Int()

Return _yPos

EndMethod

Method getHPos:Int()

Return _hPos

EndMethod

Method getMaterial:Int()

Return _material

EndMethod

'functions / methods

Function Create:TTile( xPos:Int,yPos:Int,hPos:Int,material:Int )

Local n:TTile = New TTile 'neues TTile objekt erstellen

n.setXPos( xPos ) 'x-position übergeben
n.setYPos( yPos ) 'y-position übergeben
n.setHPos( hPos ) 'h-position übergeben
n.setMaterial( material ) 'material-nummer übergeben

Return n 'fertiges TTile zurückgeben

EndFunction

Method draw() 'diese Methode wird unter dem Code besprochen

DrawImage tileset,_xPos * zoom - (scrollX*TTile._width), _yPos * zoom - _hPos - (scrollY*TTile._height),_material

EndMethod

EndType

'---------------------

Graphics 640, 480

Global map:TTile [ 256,256 ]
Global colorMap:TPixmap

Global scrollX:Int = 0
Global scrollY:Int = 0

Global screenWidth:Int = GraphicsWidth() / TTile._width 'wie viele Tiles diagonal auf den Bildschim passen
Global screenHeight:Int = GraphicsHeight() / TTile._height * 2 'und wie viele horizontal drauf passen

Global zoom:Float = 1

Global mainTimer:TTimer = CreateTimer( 60 )

Global tileset:TImage = LoadAnimImage( "gfx/tileset.png",TTile._width, 64,0,2 ) 'Tileset als AnimImage laden

'mainloop

newMap() 'neue leere Map erstellen

renderMap()

Repeat
Cls

drawMap() 'Map neu Zeichnen

If MouseHit( 1 )

Local pixel:Int = ReadPixel( colorMap,MouseX(),MouseY() )

Local x:Int = getpixmapred( colorMap,MouseX(),MouseY() )
Local y:Int = getpixmapgreen( colorMap,MouseX(),MouseY() )

Print "x: " + x + " y: " + y

EndIf

WaitTimer( mainTimer ) 'auf den Timer warten...

Flip 0
Until AppTerminate() Or KeyDown( key_escape )


Function newMap()

For Local y:Int = 0 To 255
For Local x:Int = 0 To 255

Local xpos:Int = ((x*TTile._width)+(y Mod 2)*(TTile._width/2)) 'x-position berechnen
Local ypos:Int = (y*(TTile._height/2 + 1)) 'y-position berechnen

map[ x,y ] = TTile.Create( xPos,yPos,0,1 ) 'neues TTile erstellen mit x,y,h,m parametern

Next
Next

EndFunction

Function drawMap()

SetScale( zoom,zoom ) 'scale auf zoom setzen

For Local y:Int = scrollY To scrollY + screenHeight + 1
For Local x:Int = scrollX To scrollX + screenWidth - 1

map[ x,y ].draw() 'TTile.Draw() Methode des jeweiligen Tiles aufrufen

Next
Next

SetScale( 1,1 ) 'scale auf "normal" setzen (1,1)

EndFunction

Function RenderMap()

Cls

SetScale( zoom,zoom ) 'scale auf zoom setzen

For Local y:Int = scrollY To scrollY + screenHeight + 1
For Local x:Int = scrollX To scrollX + screenWidth - 1

SetColor x,y,0 'farbe fü das Objekt setzen

Local mat:Int = map[ x,y ].getMaterial() 'altes Material speichern
map[ x,y ].setMaterial( 0 ) 'Material auf 0 setzten = weißes Tile
map[ x,y ].draw() 'TTile.Draw() Methode des jeweiligen Tiles aufrufen
map[ x,y ].setMaterial( mat ) 'altes material zurück geben

Next
Next

colorMap:TPixmap = GrabPixmap( 0,0,GraphicsWidth(),GraphicsHeight() ) 'Color map "befüllen"

Cls

SetColor 255,255,255

SetScale( 1,1 ) 'scale auf "normal" setzen (1,1)

EndFunction


Function getPixmapRed:Int(pixmap:TPixmap,x:Int,y:Int)

Local position:Int = ReadPixel(pixmap,x,y)

Return (position Shl 8) Shr 24

EndFunction

Function getPixmapGreen:Int(pixmap:TPixmap,x:Int,y:Int)

Local position:Int = ReadPixel(pixmap,x,y)

Return (position Shl 16) Shr 24

EndFunction

Function getPixmapBlue:Int(pixmap:TPixmap,x:Int,y:Int)

Local position:Int = ReadPixel(pixmap,x,y)

Return (position Shl 24) Shr 24

EndFunction

Function getPixmapAlpha:Int(pixmap:TPixmap,x:Int,y:Int)

Local position:Int = ReadPixel(pixmap,x,y)

Return position Shr 24

EndFunction



So das war es dann auch schon... ich denke ich schreibe und verbessere noch ein bisschen, aber im großen und ganzen sollte das meiste klaar sein, wenn nicht dasnn einfach mich fragen bzw. darauf hinweisen was ich zu unverständlich geschrieben habe.

Danke Smile

[BONUS]

Ein Schönes Tileset:

Schöneres Tileset mit 2 Tiles
user posted image

BB
  • Zuletzt bearbeitet von beanage.johannes am So, Jan 03, 2010 23:34, insgesamt 12-mal bearbeitet

BladeRunner

Moderator

BeitragSa, Dez 26, 2009 23:45
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich würde es für sinniger finden wenn das Tut hier als Beitrag steht. Denn wenn der Link irgendwann down ist ist der Beitrag hier wertlos.
Und die Erfahrung zeigt dass kaum ein link lange Bestand hat.
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3
Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64
B3D BMax MaxGUI

Stolzer Gewinner des BAC#48, #52 & #92

Skabus

BeitragSo, Dez 27, 2009 17:04
Antworten mit Zitat
Benutzer-Profile anzeigen
Schöne Idee für ein BMax-Tutorial,jwolf555^^

Wollt mich schon lange damit beschäftigen!
Allerdings solltest du BladeRunners Rat beherzigen.
Die PDF enthält nix was jetzt so aufwändig wäre, dass es
sich net als normalen Beitrag einbauen ließe,
außerdem glaube ich dass es so besser lesbar werden
wird^^

Freu mich auf mehr!


Edit: Noch eine kleine Anmerkung:

Es wäre gut, einige Dinge etwas ausführlicher zu Erläutern.
Die Grafik am Anfang ist zunächst etwas verwirrend.
Wäre gut, wenn du nochmal genau erläutern würdest,
warum genau du dort diese Aufteilung gewählt hast.



MfG Ska
"In einer so verrückten Welt, kann man um in ihr zu überleben nur eines tun, nämlich eben jenes werden: Ein Verrückter!" -Selbstzitat

aktuelles Projekt: Aves Certim - Der Galgen ist nicht weit!
Ein SNES-RPG mit Handels- und Wirtschaftselemente.
Infos?Hier: http://www.blitzforum.de/worklogs/234/
Besucht meine Seite:
www.seelenfriedhof.de.vu

beanage.johannes

BeitragSo, Jan 03, 2010 16:55
Antworten mit Zitat
Benutzer-Profile anzeigen
kk... werds nochmal gründlich überarbeite und erweitern und dann als post hochladen.

Frohes neue (nachträglich Wink )

beanage.johannes

BeitragSo, Jan 03, 2010 20:33
Antworten mit Zitat
Benutzer-Profile anzeigen
*Updated*

Jetzt zum im Forum lesen Smile und gründlich überarbeitet + erweitert.
Hoffe es gefällt Very Happy

[EDIT] Kleine frage noch... ist es doof von mir png bilder i web zu benutzen? weil jpg is ja kleiner aber halt doofe qualität...
 

Lion

BeitragSo, Jan 03, 2010 21:29
Antworten mit Zitat
Benutzer-Profile anzeigen
nein^^
png ist bei solch kleinen dingern auch durchaus mal besser geeignet
Intel Core 2 Quad 4x2.66 ghz - 4gb ddr2 - nvidia GeForce GTX660 2gb
Intel Atom 1x1.83 ghz - 2gb ddr2 - intel GMA 3150 256mb
AMD A10-5750M 4x2.5 ghz - 8 gb ddr4 - AMD R9 M290x

beanage.johannes

BeitragSo, Jan 03, 2010 21:43
Antworten mit Zitat
Benutzer-Profile anzeigen
Und was zum Tutorial Very Happy ?

Goodjee

BeitragSo, Jan 03, 2010 23:24
Antworten mit Zitat
Benutzer-Profile anzeigen
ich finde deine tiles nicht optimal, da die outline 2 mal nebeneinander gemalt wird
"Ideen sind keine Coladosen, man kann sie nicht recyclen"-Dr. House
http://deeebian.redio.de/ http://goodjee.redio.de/

beanage.johannes

BeitragSo, Jan 03, 2010 23:29
Antworten mit Zitat
Benutzer-Profile anzeigen
damit soll nurgezeigt werden das die Tiles sich NICHT überschneiden, auserdem kann doch jeder sein eigenes Tileset malen Wink

Habe als "Bonus" boch ein etwas schöneres Tileset Gepixelt Very Happy

Viel Spaß und Danke fürs Lesen Und Bitte Kritik Smile
 

Lion

BeitragMo, Jan 04, 2010 1:15
Antworten mit Zitat
Benutzer-Profile anzeigen
nunja, ich verwende bei einem meiner spiele, welches auch isotiles verwendet, sich überschneidende tiles... ka ist aber sicher geschmackssache.

desweiteren geht der link zu dem isopixeltutorial nicht
Intel Core 2 Quad 4x2.66 ghz - 4gb ddr2 - nvidia GeForce GTX660 2gb
Intel Atom 1x1.83 ghz - 2gb ddr2 - intel GMA 3150 256mb
AMD A10-5750M 4x2.5 ghz - 8 gb ddr4 - AMD R9 M290x

beanage.johannes

BeitragMo, Jan 04, 2010 12:04
Antworten mit Zitat
Benutzer-Profile anzeigen
bei mir geht er, der Link.

Wer möchte das die Tiles sich überchneiden muss bei der berechnung der Y-Position das "+1" hinter dem ( TTile_height / 2 +1 ) Löschen. Und schon überschneiden die Tiles sich.
Danke
 

Lion

BeitragMo, Jan 04, 2010 17:23
Antworten mit Zitat
Benutzer-Profile anzeigen
naja, der link geht schon aber...
Zitat:
Error 404 - Seite nicht gefunden

Unter der angeforderten Adresse konnte leider kein Inhalt gefunden werden.
Intel Core 2 Quad 4x2.66 ghz - 4gb ddr2 - nvidia GeForce GTX660 2gb
Intel Atom 1x1.83 ghz - 2gb ddr2 - intel GMA 3150 256mb
AMD A10-5750M 4x2.5 ghz - 8 gb ddr4 - AMD R9 M290x

Xaron

BeitragMo, Jul 05, 2010 15:53
Antworten mit Zitat
Benutzer-Profile anzeigen
Jo schade eigentlich. Kannst Du die Images nochmal irgendwo hochladen bitte?
Cerberus X - Monkey X Reloaded!
 

Macintosh

BeitragMi, Sep 29, 2010 15:27
Antworten mit Zitat
Benutzer-Profile anzeigen
-----------------------------------------------------------------------------------------------
Hier nochmal die Bilder und das Tutorial(etwas ältere version, glaub ich) als PDF, sowie den code als download.
Es fehlen ein par bilder, das PDF ist sehr veraltet und der code warscheinlich auch :/

Code:
https://www.blitzforum.de/upload/file.php?id=9584

Pdf:
https://www.blitzforum.de/upload/file.php?id=9583

Bilder:
https://www.blitzforum.de/upload/file.php?id=9582
https://www.blitzforum.de/upload/file.php?id=9581
https://www.blitzforum.de/upload/file.php?id=9580

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG FAQs und Tutorials

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group