XNA中的随机纹理

4

好的,我正在开发一个游戏,我是新手使用XNA(我正在使用4.0),我想做的是每次生成敌人时都有不同的纹理。

所以我有这些图片“image1.png”,“image2.png”等等。 我希望它每次生成新敌人时都使用不同的纹理,到目前为止,它只在游戏运行时加载随机图像,因此问题必须是随机方法在每个生成时没有更新,而是在游戏开始时设置的。 我在网上搜索了很多并尝试过一些我认为会起作用的解决方案,但无望……所以这是我的代码:

LoadContent()中,我有这段代码:

Random textureRandom = new Random();
            int skinRandom = textureRandom.Next(1, 4);
            string lamp = string.Concat("image", skinRandom.ToString());
            enemyTex = Content.Load<Texture2D>(lamp) as Texture2D; 
1个回答

3

如果我没记错的话,Game.LoadContent() 方法只在初始化(Game.Initialize())时被调用一次,用于加载游戏资源。你可以强制游戏重新加载这些资源,但是由于你不想重新加载所有资源,建议在LoadContent()方法中加载你需要的所有图片,像这样:

List<Texture2D> texturePool = new List<Texture2D>();
Random rng = new Random();

protected override void LoadContent()
{
    for(int i = 0; i < 4; i++)
        texturePool.Add(Content.Load<Texture2D>("image" + i.ToString()));
}

在敌人生成之前,您可以从已加载的纹理池中选择一种纹理来更改使用的纹理。

enemyTex = texturePool[rng.NextInt(texturePool.Count)];

也许你可以把标题改为“在XNA中随机纹理”,或者类似的内容,因为你想在每次生成时改变纹理,而不是在每次绘制时改变,这个技巧可以应用到更多的情况中。


嘿,这是一个非常好的想法,尽管目前它给我带来了黑屏的问题。但我会试着调整一下,这肯定对大多数人有效。如果我找到了可行的解决方案,我会发布我的解决方案。谢谢! - Renet

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接