Announcement

Collapse
No announcement yet.

lỗi Draw List<> khi Kế Thừa trong xna

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • [C#] lỗi Draw List<> khi Kế Thừa trong xna

    có pro nào giúp mình với
    mình đang làm đồ án cuối kì môn lập trinh win bằng xna nhưng mà đụng tới kế thừa là bị lỗi!!!
    mình có lớp Rung kế thừa lớp Tile
    Lớp Tile
    Code:
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using Microsoft.Xna.Framework;
    using Microsoft.Xna.Framework.Audio;
    using Microsoft.Xna.Framework.Content;
    using Microsoft.Xna.Framework.GamerServices;
    using Microsoft.Xna.Framework.Graphics;
    using Microsoft.Xna.Framework.Input;
    using Microsoft.Xna.Framework.Media;
    using Microsoft.Xna.Framework.Net;
    using Microsoft.Xna.Framework.Storage;
    namespace tank
    {
        class Tile
        {
            
            Texture2D texture{get;set;}
            Vector2 toado;
            public bool isCollides = false;
            public Tile(Game game, Vector2 _pos)
            {
                toado = _pos;
                
            }
            public void LoadContent(ContentManager Content,String str)
            {
                texture = Content.Load<Texture2D>(str);
            }
            public Rectangle GetBound()
            {
                return new Rectangle((int)toado.X, (int)toado.Y, texture.Width, texture.Height);
            }
            public bool CheckCollides(xetank sp)
            {
                return sp.GetBound().Intersects(GetBound());
            }
            public void Draw(SpriteBatch sp)
            {
                sp.Draw(texture, toado, Color.White);
    
            }
        }
    }
    Lớp rung:
    Code:
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using Microsoft.Xna.Framework;
    using Microsoft.Xna.Framework.Audio;
    using Microsoft.Xna.Framework.Content;
    using Microsoft.Xna.Framework.GamerServices;
    using Microsoft.Xna.Framework.Graphics;
    using Microsoft.Xna.Framework.Input;
    using Microsoft.Xna.Framework.Media;
    using Microsoft.Xna.Framework.Net;
    using Microsoft.Xna.Framework.Storage;
    
    namespace tank
    {
        class Rung:Tile
        {
            public Rung(Game game, Vector2 pos)
                : base(game, pos)
            {
            }
        }
    }
    Trong Game1.cs:
    Code:
     //ve khu rung
                foreach (Rung khurung in listRung)
                    khurung.Draw(spriteBatch);
    thì lại bị lỗi như vây:
    Untitled.png
    còn có 2 lớp Gach và Đá ko kế thừa lớp Tile thì Draw bình thương
    Code:
      //ve gach
                foreach (Gach viengach in listgach)
                    viengach.Draw(spriteBatch);
                //ve da
                foreach (Da vienda in listDa)
                    vienda.Draw(spriteBatch);
    2.png

    bị lỗi này chỉ khi xài tới list<> còn nếu bình thường Draw 1 Rung thì vẫn bình thường !!!
    mong các Bro xem giúp!

  • #2
    Bạn đã khai báo thuộc tính texture của lớp Rung trong phần LoadContent chưa?
    Không có gì là không thể nếu chúng ta có lòng tin.
    http://gabrielbl.com

    Comment


    • #3
      Originally posted by 09520548 View Post
      Bạn đã khai báo thuộc tính texture của lớp Rung trong phần LoadContent chưa?
      mình đã Load rồi ... nếu chỉ vẽ 1 Draw ko xai tới list<> thì vẫn bình thương
      3.png

      Comment


      • #4
        Không rõ là nó bị gì vì không xem được hết code của bạn , nhưng theo mình nghĩ thì có thể do hàm Draw trong lớp Tile của bạn, khi bạn cho 1 List nó Draw ra thì nó sẽ gọi liên tục khiến cho hệ thống không đáp ứng kịp trong cùng 1 thời gian nên xảy ra lỗi, theo mình nghĩ là như vậy . Bạn để ý hàm Draw mặc định trong lớp Game.cs có truyền vào biến gameTime để nó thực hiện trình tự theo thời gian chứ không cùng 1 lúc khiến bị treo . Vậy bạn thử sửa hàm Draw trong lớp Tile của bạn theo dạng này thử coi:
        Code:
        public void Draw(GameTime gameTime, SpriteBatch sp) {
              sp.Draw(texture,toado,Color.White);
              base.Draw(gameTime);
        }
        Không có gì là không thể nếu chúng ta có lòng tin.
        http://gabrielbl.com

        Comment


        • #5
          vẫn không được!... bạn có thể cho mình Yh.. mình hỏi thêm được không?

          Comment


          • #6
            Originally posted by 10520226 View Post
            vẫn không được!... bạn có thể cho mình Yh.. mình hỏi thêm được không?
            baolanlequang .
            Không có gì là không thể nếu chúng ta có lòng tin.
            http://gabrielbl.com

            Comment


            • #7
              Originally posted by 09520548 View Post
              Không rõ là nó bị gì vì không xem được hết code của bạn , nhưng theo mình nghĩ thì có thể do hàm Draw trong lớp Tile của bạn, khi bạn cho 1 List nó Draw ra thì nó sẽ gọi liên tục khiến cho hệ thống không đáp ứng kịp trong cùng 1 thời gian nên xảy ra lỗi, theo mình nghĩ là như vậy . Bạn để ý hàm Draw mặc định trong lớp Game.cs có truyền vào biến gameTime để nó thực hiện trình tự theo thời gian chứ không cùng 1 lúc khiến bị treo . Vậy bạn thử sửa hàm Draw trong lớp Tile của bạn theo dạng này thử coi:
              Code:
              public void Draw(GameTime gameTime, SpriteBatch sp) {
                    sp.Draw(texture,toado,Color.White);
                    base.Draw(gameTime);
              }

              Không đâu Lân à, nguyên tắc vẽ vậy đúng ui.

              @Đào Lý Trân : Bạn xem lại code xem , đã gọi hàm LoadContent của tất cả các đối tượng Rung trong cái listRung của bạn hay chưa?
              Mình đoán là chưa gọi cho tất cả ( chỉ mới gọi cho listRung[0] )

              Im a british accent lover

              Comment


              • #8
                Originally posted by 08520016 View Post
                Không đâu Lân à, nguyên tắc vẽ vậy đúng ui.

                @Đào Lý Trân : Bạn xem lại code xem , đã gọi hàm LoadContent của tất cả các đối tượng Rung trong cái listRung của bạn hay chưa?
                Mình đoán là chưa gọi cho tất cả ( chỉ mới gọi cho listRung[0] )
                Em không rõ cơ chế lắm nên chỉ đoán vậy thôi . Không xem kỹ code thì thật là khó biết bạn ấy sai chỗ nào cả.
                @Đào Lý Trân: Bạn cứ kiên nhẫn ngồi debug thì sẽ ra thôi
                Không có gì là không thể nếu chúng ta có lòng tin.
                http://gabrielbl.com

                Comment


                • #9
                  Originally posted by 08520016 View Post
                  Không đâu Lân à, nguyên tắc vẽ vậy đúng ui.

                  @Đào Lý Trân : Bạn xem lại code xem , đã gọi hàm LoadContent của tất cả các đối tượng Rung trong cái listRung của bạn hay chưa?
                  Mình đoán là chưa gọi cho tất cả ( chỉ mới gọi cho listRung[0] )
                  cảm ơn anh.. đúng như anh nói em đã sửa xong.. tks anh nhé...và A. Lân nữa

                  Comment

                  LHQC

                  Collapse
                  Working...
                  X