Ron Penton - Sprite Class - C#
lima-city → Forum → Programmiersprachen → Programmieren mit .NET & Mono
arbeit
buchen
code
erfahrung
fehler
gemacht beitrag
gleiche problem
jemand
kapitel
laden
methode
modifizierte code
moment
null
offset
projekt
set
sonstige programmiersprachen
system
vorgesehen laufen
-
Ich arbeit im Moment das Buch \"Beginning C# Game Programming\" von Ron Penton durch. Leider baut das Buch auf DirectX 9.0b auf und ich benutze natürlich 9.0c. In Kapitel 7 arbeitet man mit einer von Penton selbst erstellten Spriteklasse, die man sich einfach ins Projekt laden kann. Beim Kompilieren gab \'s dann einpaar Fehler, die ich aber rausbügeln konnte. Hier ist der modifizierte Code:
System.Drawing.SizeF tmp_scaling = new System.Drawing.SizeF(scaling.X, scaling.Y); System.Drawing.PointF tmp_scaledanchor = new System.Drawing.PointF(scaledanchor.X, scaledanchor.Y); System.Drawing.PointF tmp_offset = new System.Drawing.PointF(newoffset.X - camera.Offset.X, newoffset.Y - camera.Offset.Y); renderer.Draw2D( texture, rect, tmp_scaling, tmp_scaledanchor, angle, tmp_offset, color );
Ich habe einfach die Methode Draw2D statt Draw benutzt und DirectX.Vector2 Variablen in die entsprechenden für die Methode umgewandelt (also SizeF und PointF).
Jetzt wird alles Problemlos kompiliert und ausgeführt, allerdings wird nichts angezeigt.
Hat jemand schon Erfahrungen mit DirectX 9.0c und dem Buch gemacht?
Beitrag geändert: 7.4.2008 0:54:10 von m84 -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Ich habe die Klasse jetzt einfach selbst mal auseinandergenommen und neu zusammengesetzt. Falls jemand das gleiche Problem hat. Hier ist der Code:
public class Sprite { Direct3D.Texture texture; Drawing.Rectangle rect; System.Drawing.SizeF scaling; System.Drawing.PointF offset; System.Drawing.PointF anchor; float angle; Drawing.Color color; public Sprite() { texture = null; scaling = new System.Drawing.SizeF(1.0f, 1.0f); offset = new System.Drawing.PointF(0.0f, 0.0f); anchor = new System.Drawing.PointF(0.5f, 0.5f); angle = 0.0f; color = Drawing.Color.White; } public Direct3D.Texture Texture { get { return texture; } set { texture = value; rect = new Drawing.Rectangle( 0, 0, Width, Height ); } } public int Width { get { return texture.GetLevelDescription( 0 ).Width; } } public int Height { get { return texture.GetLevelDescription( 0 ).Height; } } public float XScale { get { return scaling.Width; } set { scaling.Width = value; } } public float YScale { get { return scaling.Height; } set { scaling.Height = value; } } public float Scale { set { scaling.Width = value; scaling.Height = value; } } public float X { get { return offset.X; } set { offset.X = value; } } public float Y { get { return offset.Y; } set { offset.Y = value; } } public float XAnchor { get { return (float)anchor.X; } set { anchor.X = value; } } public float YAnchor { get { return (float)anchor.Y; } set { anchor.Y = value; } } public float Angle { get { return angle; } set { angle = value; } } public Drawing.Color Color { get { return color; } set { color = value; } } public void Draw( Direct3D.Sprite renderer, Camera camera ) { float w = XScale * Width; float h = YScale * Height; System.Drawing.PointF scaledanchor = anchor; scaledanchor.X *= Width; scaledanchor.Y *= Height; System.Drawing.PointF camoffset = new System.Drawing.PointF(offset.X - camera.Offset.X, offset.Y - camera.Offset.Y); renderer.Draw2D(texture, rect, new System.Drawing.SizeF(w, h), scaledanchor, angle, camoffset, color); } }
Jetzt müsste alles wie vorgesehen laufen.
Beitrag geändert: 14.4.2008 14:08:15 von m84 -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage