Komischer Effekt bei Iso-Darstellung
Übersicht

NoxBetreff: Komischer Effekt bei Iso-Darstellung |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hi.
Ich arbeite seit einigen Tagen an einer kleinen, schlechten Iso-Engine (2D) und bemerkte einen ziemlich "merkwürdigen" Effekt. Und zwar folgendes: Ist der Teil der Map, der dargestellt wird, nur zur Hälfte ausgefüllt (sprich das Programm überspringt die Hälfte der Tiles, da diese transparent sind), dann habe ich weniger FPS, als wenn der komplette Screen gefüllt wird. Merkwürdig ist halt, dass die Rendering-Time von ca. 3-4ms auf max. 7 ms ansteigt, allerdings auch die FPS. Ist das möglich oder habe ich da meinen FPS-Code versaut? ^^ Screen als "Beweis": (128kb) http://www.pressure-team.de/bb/iso1.jpg Greets, Nox |
||
![]() |
Jan_Ehemaliger Admin |
![]() Antworten mit Zitat ![]() |
---|---|---|
dazu müsste ich den Code sehen. | ||
between angels and insects |
David |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hi!
Jo, post mal den relevanten Code hier rein, bin mir sicher das hier niemand hellsehen kann.. Achja, ist das wirklich ISO Perspektive? Sieht garnicht so aus... :S grüße |
||
Dreamora |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Sieht für mich auch eher nach TopDown als Iso aus.
Vielleicht ist dein Culling Code nicht optimal oder deine Berechnungsroutinen falsch. |
||
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen. |
Nox |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Nunja, es ist - schon ganz richtig erkannt - nicht wirklich isometrisch. Denn die Isometrie hat ja einen festen Winkel zum Betrachter, welchen ich einfach mal ignoriert habe (bei mir sind's 45°, so ganz im Ultima Online-Stil ^^).
Relevanter Code hier: Code: [AUSKLAPPEN] renderstartms = MilliSecs() DrawMap() Text 5, 5, "Coords: ("+GetMouseTX()+", "+GetMouseTY()+")" Text 700,5, "Selected:" DrawImage GetTileTexture(editid), 720, 25 ms = MilliSecs() renderms = ms - renderstartms fpsms = fpsms + renderms fpstemp = fpstemp + 1 If (ms - fpsms >= 500) Then fps = fpstemp * 2 fpsms = ms fpstemp = 0 EndIf EDIT: Hier noch die Draw-Routine der Map: Code: [AUSKLAPPEN] ; Draws the map Function DrawMap() drawx = 0 drawy = 0 tilex = 0 tiley = 0 ; === DRAWING ENGINE === For y = posy To posy + 49 For x = posx To posx + 49 drawx = (SCREEN_WIDTH / 2 - 16) + (16 * tilex) - (tiley * 16) - offsetx + offsety drawy = -432 + (tiley * 16) + (tilex * 16) - (tiles(x,y)\z%) - offsety - offsetx ; Only draw if the tile is visible on the screen If drawx > -32 And drawx < SCREEN_WIDTH And drawy > -32 And drawy < SCREEN_HEIGHT Then DrawTile tiles(x,y)\texture%, drawx, drawy ; **** DEBUG SHIT *>>> If x = 11 And y = 30 Then DrawImage texChar(0), drawx - ImageWidth(texChar(0))/2+16, drawy - ImageHeight(texChar(0)) + 16 EndIf ; **** DEBUG *****<<< EndIf tilex = tilex + 1 Next tilex = 0 tiley = tiley + 1 Next End Function Biddeschö'. |
||
![]() |
Jan_Ehemaliger Admin |
![]() Antworten mit Zitat ![]() |
---|---|---|
Was macht der "DEBUG SHIT"? | ||
between angels and insects |
Nox |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Huch, ignoriert mal das dumme Kommentar. ![]() Das zeichnet lediglich die Figur, die man auf dem Screen sieht. ![]() |
||
hot-bitGast |
![]() Antworten mit Zitat |
|
---|---|---|
Hoi ...
tztztz... Steht doch da ! Toni |
||
![]() |
Hubsi |
![]() Antworten mit Zitat ![]() |
---|---|---|
@hot-bit: Kannst Du dir deine unnötigen Kommentare nicht einfach sparen? Oder hast Du im RL nichts zu sagen? | ||
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn... |
Nox |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
lol... ![]() Also um nochmal zurück zum Thema zu kommen: Inwiefern die DrawMap()-Funktion jetzt falsch ist, dürfte ja _eigentlich_ keine Rolle spielen, denn mein Problem (oder auch nicht?) liegt ja bei den FPS vs. Rendertime. Ich find's halt etwas merkwürdig, dass ich deutlich mehr FPS erziele, umso höher die Render-Time ist... EDIT: Okay, Fehler gefunden: Code: [AUSKLAPPEN] fpsms = fpsms + renderms Das musste weg... ![]() |
||
hot-bitGast |
![]() Antworten mit Zitat |
|
---|---|---|
Hoi..
@Hubsi: Was soll das jetzt ? Dieser Kommentar war nötig, denn wenn man die paar Zeilen nicht lesen und richtig interpretieren kann, braucht man hier gar nichts zu posten, denn dann wäre es sinnlos, da man ja nicht kapiert, um was es geht. Oder liege ich da falsch ? Toni |
||
![]() |
Jan_Ehemaliger Admin |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hm, ja, klar, das ich da nciht selber drauf gekommen bin,
Code: [AUSKLAPPEN] ; **** DEBUG SHIT *>>>
If x = 11 And y = 30 Then DrawImage texChar(0), drawx - ImageWidth(texChar(0))/2+16, drawy - ImageHeight(texChar(0)) + 16 EndIf ; **** DEBUG *****<<< muss ja eine Figur Zeichnen, wie es Debugshit = Figur, oder? mir musste doch auffallen, das eine Figur immer an x11 und y30 gezeichnet wird. @ Hotbit, du bist echt super! |
||
between angels and insects |
hot-bitGast |
![]() Antworten mit Zitat |
|
---|---|---|
Hoi..
Doch Jan_. Das hätte dir doch einleuchten müssen. Da ist eine Schleife für x und eine Schleife für y. Und wenn x=11 und y=30 ist, wird ein Bild gezeichnet. Was ist da dran nicht zu verstehen ? Hätte mir doch etwas mehr von dir erwartet. Hmmm, vielleicht warst nicht ausgeschlafen ![]() Obwohl das Code-Schnipsel totaler Schwachsinn ist, weil da eine Abfrage stattfindet, die eigentlich gar nicht hierhin gehört. Der soll seine Figur NACH Abarbeitung der Schleifen zeichnen lassen ! Toni |
||
Nox |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Zitat: Der soll seine Figur NACH Abarbeitung der Schleifen zeichnen lassen !
Sorry, aber DAS ist Schwachsinn. Es ist enorm wichtig, alles, was eine Position hat, nacheinander abzuarbeiten. In meinem Fall alle x-Reihen nacheinander (x-Reihe von oben links nach unten rechts). Stelle dir mal vor, der Z-Wert (entspricht der Höhe eines Tiles) eines Tiles, sagen wir an Position (5 | 5), ist um einiges höher als jener vom Tile an Position (5 | 4). Zeiche ich nun zuerst alle Tiles, sprich die Map (also Schleifendurchgänge abarbeiten), und danach eine Figur an Position (5 | 4), wird diese das Tile an (5 | 5) überzeichnen, obwohl sie eigentlich etwas verdeckt sein müsste. Problematik erkannt? |
||
getlose |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
2 layer wäre auch ne lösung | ||
Nox |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ich verwende absichtlich keine Layer im klassischen Sinne, da stapelbare Items oder jene, die übereinander dargestellt werden sollen, nicht "endlos" möglich sind.
Als Vorzeigebeispiel kann man sich einfach Ultima Online ansehen. |
||
![]() |
BladeRunnerModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Mach 2 layer und unterteile das 2. layer in highword und loword.
diese geben dann den index von ID und anzahl der Gegenstände eines Containertypes an in dem die Items gespeichert sind. dann kannst du stapeln bis der arzt kommt. (lmmerhin 65k ID s möglich mit 65k items drauf.) |
||
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 |
hot-bitGast |
![]() Antworten mit Zitat |
|
---|---|---|
Hoi..
Und der MaskImage- Befehl ist wohl ausgestorben ? Oder er wird wegen Schlecht-Wetter nicht mehr gebraucht ? Wenn die Figur, die du da zeigst auf deinem Screnn alles ist, was du hinzeichnest, wo gibt es dann da eine Problematik ? Toni |
||
Nox |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
@BladeRunner:
So bin ich das noch garnicht angegangen, vielen Dank für die Info. ![]() @hot-bit: Für dich werde ich einen exklusiven Screenshot erstellen, um die Problematik zu verdeutlichen. Ist gleich hochgeladen.. EDIT: So, erstmal die falsche Variante (erst Map zeichnen, dann die Figur): http://www.pressure-team.de/bb/falsch.jpg Und nun die richtige Variante (gezeichnet, während an richtiger Position): http://www.pressure-team.de/bb/richtig.jpg Ich hoffe, es ist für dich nun endgültig klar, dass auch MaskImage damit rein garnix zu tun hat... (hättest du den 1. Screen mit genug Aufmerksamkeit betrachtet, hättest du entdeckt, dass die Figur mit MaskImage gezeichnet wurde...)[/url] |
||
hot-bitGast |
![]() Antworten mit Zitat |
|
---|---|---|
Hoi..
Alles klar ... Toni |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group