Alles vergessen - Sprites und die Kamera
-
Hey!
Möchte mal wieder bisschen DirectX9 coden aber versteh da was nicht.
Ich hab einige Sprites gezeichnet und möchte nun die Kamera bewegen.Aber bei D3DXMatrixLookAtLH und SetTransform tut sich garnix...
Könnt ihr mir mal erklären wo der Unterschied zwischen Sprites und selbst definierten Dreiecken ist? Bei denen hat das immer funktioniert soweit ich mich erinnern kann.
Ich möchte nämlich eine Map bestehend aus TILES bauen, und damit sich der Spieler bewegen kann einfach die Kamera verschieben.
Hab was von SetWorldViewLH gelesen, aber ich finde keine gute Anleitung.
MfG
-
hab des öfteren mal eine auf sprites basierende Tilemap gebaut, sogar mit parallax scrolling, aber ohne DirectX. Ich weiß nur, dass ich "look at" nie gebraucht habe. hab einfach immer die Koordinaten der Kamera von denen der Tiles abgezogen, und schon waren sie alle am richtigen Ort.
-
Hmm, ich wollte einfach nicht bei jeder Spielerbewegung die Positionen aller Tiles neu setzen, sondern:
- Positionen der Tiles sind fix
- Abhängig von der Kameraposition werden nur die Tiles, die im Sichtfeld sind, gezeichnetAber nun verstehe ich glaube ich, Sprites sind ja keine Vertices und somit hat eine Transformation keinen Effekt darauf, also bleibt mir nur das manuelle Zeichnen und Texturieren von Dreiecken für jedes Tile, wenn ich bei meinem Vorgehen bleiben möchte?!
MfG
-
Bau dir einfach schnell selbst eine Sprite Klasse. Also einfach zwei Dreiecke texturieren, ist ja nicht so schwierig...
-
Hallo
Arbeite auch mit DirectX und selbstdefinierten Sprites um ein 2D Spiel zu machen. Aber spielt keine Rolle ob das nun DX, OGL oder 3DFX ist.
Ich habe einfach eine Camera-Klasse gemacht die den Bildschirm darstellt also eine Box2F(meine eigene float-basierte RECT-Klasse) als Member hat.
Dann hat jedes GameObject eine abstrakte Methode die so aussieht:
virtual void onDraw( Box2F &camera ); // Da kommen dann noch dinge wie onAnimate(), onCollision(), onPrepare() etc. dazu. // Habe ich hier aber absichtlich nicht gelistet.So musst Du nur die Kamera verschieben und die Objekte melden sich selbst an den Renderer wenn (wie bei mir) mBoundingBox.intersects( camera ) true zurückliefert also wenn sie teilweise oder ganz sichtbar sind.
Gruss, Andi
Edit: Das geht natürlich davon aus, dass alle Koordinaten der Objekte in Weltkoordinaten gehalten sind.
-
Interessant, danke.
MfG