kostenloser Webspace werbefrei: lima-city


Ron Penton - Sprite Class - C#

lima-cityForumProgrammiersprachenProgrammieren mit .NET & Mono

  1. Autor dieses Themas

    m*4

    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
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. Verschoben nach Sonstige Programmiersprachen.

    MfG,
    thw
  4. Autor dieses Themas

    m*4

    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
  5. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!