Bonjour, j'ai un soucis avec mon scrolling, j'ai mis 2 screenshot pour vous puissiez visualiser le problème .
La première question que je me pose c'est est-ce que cela peut venir de ma méthode de chargement de mon tileset et de son découpage?Les lignes verticales sont de la couleur de la tile qui se trouve à coté.
J'ai essayé de mettre tous mes déplacements en int, il n'y a plus de soucis, dans ma fonction draw je passais par un rectangle, alors je me suis dis que si je passais par des vector2 et que je remettais mes déplacement en float cela devrait aller, mais il se trouve que non.
Mon scrolling se fait par le biais d'une classe camera qui déplace donc mon niveau par rapport à mon joueur comme ceci
Je charge mon tileset et le découpe comme ceci
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46 public class Camera { private Matrix transform; public Matrix Transform { get { return transform; } } private Vector2 center; private Viewport viewport; public Camera(Viewport newViewport) { viewport = newViewport; } public void Update (Vector2 position, int xOffset, int yOffset) { if (position.X < viewport.Width / 2) { center.X = viewport.Width / 2; } else if (position.X > xOffset - viewport.Width / 2) { center.X = xOffset - viewport.Width / 2; } else center.X = position.X; if (position.Y < viewport.Height / 2) { center.Y = viewport.Height / 2; } else if (position.Y > yOffset - viewport.Height / 2) { center.Y = yOffset - viewport.Height / 2; } else center.Y = position.Y; transform = Matrix.CreateTranslation(new Vector3(-center.X + (viewport.Width/2),-center.Y + (viewport.Height/2),.0f)); } }
et je le dessine comme ceci
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 private void LoadTileSetsolid(Texture2D solid) { noOfTilesSolidX = solid.Width / tileWidth; noOfTilesSolidY = solid.Height / tileHeight; //initialisation de la liste de tile tileSetsolide = new List<Rectangle>((noOfTilesX * noOftilesY)); //obtenir les limites de toutes les tiles de la feuille for (int j = 0; j < noOfTilesSolidY; j++) { for (int i = 0; i < noOfTilesSolidX; i++) { limitesSolide = new Rectangle(i * tileWidth, j * tileHeight, 32, 32); tileSetsolide.Add(limitesSolide); } } }
Je vous dis que je pense que cela vient de ma fonction loadtilset parce que j'ai refait un mini code en chargeant mes tiles séparément et je n'ai plus se soucis, mais je ne sais pas comment cela se fait-il et j'aimerais continuer à utiliser mes planches de tiles.Mais je dois me tromper quelque part, et je ne vois pas où
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 if (AABBLayer.layer[x, y] !=-1) { //obtenir la tile limitesSolide = tileSetsolide[AABBLayer.layer[x, y] ]; //dessine la tile spriteBatch.Draw(solid, new Vector2((((float)(x - drawOffset.X) * tileWidth)), ((y /*- drawOffset.Y*/) * tileHeight)), limitesSolide, Color.White); //spriteBatch.Draw(solid, new Rectangle(x*tileHeight,y*tileHeight,32,32),limites, Color.White); //spriteBatch.Draw(solid, new Vector2(((x /*- drawOffset.X*/) * tileWidth),((y /*- drawOffset.Y*/) * tileHeight)), limites, Color.White, 0.0f, new Vector2(0,0), 1.0f, SpriteEffects.None, 0); }
Je vous remercie d'avance
Partager