2013-04-17 34 views
0

所以我正在研究側滾動平臺遊戲。我改變了一些代碼來允許滾動背景,這是完美的工作;但是現在當我的水平提前時,背景保持不變。XNA平臺遊戲背景不再改變

這是層

class Layer 
{ 
    public Texture2D[] Textures { get; private set; } 
    public float ScrollRate { get; private set; } 

    public Layer(ContentManager content, string basePath, float scrollRate) 
    { 
     // Assumes each layer only has 3 segments. 
     Textures = new Texture2D[3]; 
     for (int i = 0; i < 3; ++i) 
      Textures[i] = content.Load<Texture2D>(basePath + "_" + i); 

     ScrollRate = scrollRate; 
    } 

    public void Draw(SpriteBatch spriteBatch, float cameraPosition) 
    { 
     // Assume each segment is the same width. 
     int segmentWidth = Textures[0].Width; 

     // Calculate which segments to draw and how much to offset them. 
     float x = cameraPosition * ScrollRate; 
     int leftSegment = (int)Math.Floor(x/segmentWidth); 
     int rightSegment = leftSegment + 1; 
     x = (x/segmentWidth - leftSegment) * -segmentWidth; 

     spriteBatch.Draw(Textures[leftSegment % Textures.Length], new Vector2(x, 0.0f), Color.White); 
     spriteBatch.Draw(Textures[rightSegment % Textures.Length], new Vector2(x + segmentWidth, 0.0f), Color.White); 
    } 
} 

類這是一流水平的裝載部分一級構造

public Level(IServiceProvider serviceProvider, Stream fileStream, int levelIndex) 
    { 
     // Create a new content manager to load content used just by this level. 
     content = new ContentManager(serviceProvider, "Content"); 

     timeRemaining = TimeSpan.FromMinutes(2.0); 

     LoadTiles(fileStream); 

     // Load background layer textures. 
     layers = new Layer[3]; 

     layers[0] = new Layer(Content, "Backgrounds/Layer0", 0.2f); 
     layers[1] = new Layer(Content, "Backgrounds/Layer1", 0.5f); 
     layers[2] = new Layer(Content, "Backgrounds/Layer2", 0.8f); 






     // Load sounds. 
     exitReachedSound = Content.Load<SoundEffect>("Sounds/ExitReached"); 
    } 

它看起來像在此之前我改成了允許滾動

layers = new Texture2D[3]; 
for (int i = 0; i < layers.Length; ++i) 
{ 
    // Choose a random segment if each background layer for level variety. 
    int segmentIndex = random.Next(3); 
    layers[i] = Content.Load<Texture2D>("Backgrounds/Layer" + i + "_" + segmentIndex); 
} 

謝謝你的時間。

回答

0

好吧,我注意幾件事情:

  1. 當你改變了它允許滾動,你的層次從一個網段去3.
  2. 被選定爲每個單段層的圖像隨機(三分之一),現在每個圖層都有三個段,按照for循環加載。
  3. 您不會將您的關卡指數歸因於紋理的選擇。

所以,在過去,每個級別都會給你一個隨機選擇的背景,現在你每次都得到相同的選擇,因爲你在for循環中加載了段1,然後是2,然後是3。

建議:

  • 重新引入隨機性
  • 吸引更多人的背景和因素,以背景的選擇,你的水平指數
+0

你會如何考慮水平指數在? – Pranaryx

0

我並沒有完全得到你想要的東西這裏:

spriteBatch.Draw(Textures[leftSegment % Textures.Length], new Vector2(x, 0.0f), Color.White); 
spriteBatch.Draw(Textures[rightSegment % Textures.Length], new Vector2(x + segmentWidth, 0.0f), Color.White); 

更準確地說,這兩樣東西:

leftSegment % Texture.Length 
rightSegment % Textures.Length 

您是否試圖手動插入索引?像...

spriteBatch.Draw(Textures[0]... 
spriteBatch.Draw(Textures[1]... 
... 

由於這些leftSegmentrightSegment都依賴於segmentWidth的,對不對?

int segmentWidth = Textures[0].Width; 

那寬度總是會一樣嗎?如果是的話,那麼就不需要在繪製方法的紋理索引上做這件事,因爲它總是會有相同的索引...

我不太明白你在那裏試過了什麼(對不起,我有點愚蠢),但它聽起來......對我來說很陌生...... 我不知道,也許我只是說無意義的東西...

+0

不同級別的寬度會發生變化 – Pranaryx