Click here to Skip to main content
11,581,982 members (75,514 online)
Rate this: bad
good
Please Sign up or sign in to vote.
See more: C# XNA3.0
Hello everyone!

I am using XNA to develope a game of mine. It's similar to Terraria and Minecraft so I'd just call it a 2D voxel engine. And basically, I just created a Chunk System that works fine. The only problem I have so far is drawing the view. When I draw the view, I draw block by block, now obviously that will give you a wierd grid effect. I got a picture below to give you an understanding of what I currently have and what I want to have.

[IMG]http://i47.tinypic.com/1zbug61.png[/IMG]

Basically, I am currently drawing the blocks in a view snapped to the blocks, which I do by using the middle chunk(4), I could also get a block by doing ThePlayer.GetBlock, in that way I can get a block in the loaded chunks next to it. So even though I have a method that could help me out a lot I am still unsure on how to make the view work with multiple blocks, anyways here is the code:

        public void DrawWorld()
        {
                    Chunk Chunk = ThePlayer.LoadedChunks[4];
 
                    foreach (Block Block in Chunk._Blocks)
                    {
                        // -- Color.
                        Texture2D toDraw = null;
 
                        // -- Get the Right Block.
                        switch (Block.BlockID)
                        {
                            case ID.BLOCK_AIR:
                                toDraw = BlockAir;
                                break;
                            case ID.BLOCK_DIRT:
                                toDraw = BlockDirt;
                                break;
                            case ID.BLOCK_GRASS:
                                toDraw = BlockGrass;
                                break;
                            case ID.BLOCK_SAND:
                                toDraw = BlockSand;
                                break;
                            case ID.BLOCK_STONE:
                                toDraw = BlockStone;
                                break;
                            case ID.BLOCK_COBBLESTONE:
                                toDraw = BlockCobblestone;
                                break;
                            case ID.BLOCK_BRICK:
                                toDraw = BlockBrick;
                                break;
                            case ID.BLOCK_WOODPLANK:
                                toDraw = BlockPlank;
                                break;
 
                        }
 
                        Rectangle _Rec = new Rectangle(Block.X * ID.BlockSize - ThePlayer.BlockX * ID.BlockSize, Block.Y * ID.BlockSize - ThePlayer.BlockY * ID.BlockSize, ID.BlockSize, ID.BlockSize);
                        spriteBatch.Draw(toDraw, _Rec, Color.White);
                        spriteBatch.DrawString(FontTerrasylum, "Pixel: " + ThePlayer.PixelX + " " + ThePlayer.PixelY, new Vector2(0, 0), Color.White);
                        spriteBatch.DrawString(FontTerrasylum, "Block: " + ThePlayer.BlockX + " " + ThePlayer.BlockY, new Vector2(0, 32), Color.White);
                        spriteBatch.DrawString(FontTerrasylum, "Chunk: " + ThePlayer.ChunkX + " " + ThePlayer.ChunkY, new Vector2(0, 64), Color.White);
            }
        }

Also; There are some important variables:


Chunk
- X
- Y
- Blocks
- X
- Y

Player:

PixelX
PixelY
BlockX
BlockY
ChunkX
ChunkY
LoadedChunks[0-8]
Posted 8-Jan-13 1:33am
Yvar Birx2.4K
Edited 8-Jan-13 1:35am
v2

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)

  Print Answers RSS
0 OriginalGriff 320
1 Sergey Alexandrovich Kryukov 185
2 virusstorm 109
3 Frankie-C 105
4 F-ES Sitecore 85
0 OriginalGriff 1,273
1 Sergey Alexandrovich Kryukov 900
2 Abhinav S 617
3 F-ES Sitecore 500
4 Suvendu Shekhar Giri 433


Advertise | Privacy | Mobile
Web03 | 2.8.150603.1 | Last Updated 8 Jan 2013
Copyright © CodeProject, 1999-2015
All Rights Reserved. Terms of Service
Layout: fixed | fluid

CodeProject, 503-250 Ferrand Drive Toronto Ontario, M3C 3G8 Canada +1 416-849-8900 x 100