我使用的是部署一2D项目。我有一个问题,我不知道哪种方式来解决。我有一个纹理(图像)就被吸引到屏幕例如:

|+++|+++|
|---|---|
|+++|+++|

现在我希望能够销毁的一部分,结构/图像让它看起来像:

|+++|
|---|---|
|+++|+++|

这样的碰撞现在将工作以及为的新的形象。

这种方法将更好地解决这个问题:

  1. 换整个纹理的另一个纹理、透明的地方在那里被毁坏。
  2. 使用一些技巧与spriteBatch.绘制(则不,destinationRectangle),以获得所需的矩形图绘制,也不碰撞检查与这个莫名其妙。
  3. 分裂纹到4个较小的纹理的每一个这将负责它自己的绘图/冲突的检测。
  4. 使用一些其他的聪明办法,我不知道。

任何帮助,将不胜感激。让我知道如果你需要更多的澄清/实例。

编辑:澄清,我将提供一个实例的使用情况。想象一下,一个4x4一的墙,这时枪击,稍1×1部分被破坏。

有帮助吗?

解决方案 4

最后我选择选项3。基本上,我有一个瓷砖类,包含一个质地和维.维n意味着,有n*n子内瓦。我也有一个数组,持续跟踪切片被摧毁或没有。我们班看起来像这样的伪码:

 class Tile
     texture
     dimention
     int [,] subtiles; //0 or 1 for each subtile

     public Tile() // constructor
         subtiles = new int[dimention, dimention];
         intialize_subtiles_to(1);

     public Draw() // this is how we know which one to draw
        //iterate over subtiles
        for(int i..
          for(int j ...)
             if(subtiles[i,j] == 1)
                Vector2 draw_pos = Vector2(i*tilewidth,
                                      j*tileheight)                       
                spritebatch.Draw(texture, draw_pos)

在一个类似的方式,我有一个碰撞方法,将检查碰撞:

   public bool collides(Rectangle rect)
       //iterate over subtiles 
       for i...
          for j..
              if(subtiles[i,j]==0) continue;

              subtile_rect = //figure out the rect for this subtile
              if(subtile_rect.intersects(rect))
                   return true;

       return false;

等等。你可以想象如何"消灭"某些子通过制定其各自的价值为0,以及如何检查,如果整个瓷砖被破坏。授予这种技术,子将所有具有相同的纹理。迄今为止我不认为一个简单的解决方案。

其他提示

我会取的 第三 选项:

3 -分裂纹到4个较小的 纹理每个会 负责它自己的 绘图/冲突的检测。

这并不难做到。它基本上是相同的地形组件的结构。但是,你会需要改变你的代码,以适应这种做法。读一点关于瓦: http://www-cs-students.stanford.edu/~amitp/gameprog.html#瓷砖 许多网站和图书所述有关的瓷砖,以及如何使用它建立的游戏世界。但你可以使用这种逻辑的一切全是天然肥料从小部分。

让我快速的注意的其他选择:

1 -交换整个纹理 另一个纹理,这是透明的 在地方被摧毁。

没有..有一个不同的图像,每一个不同的位置是不好的。如果你需要更改de纹?你会改造的每一个图像了吗?

2-使用的一些与欺骗 spriteBatch.绘制(则不, destinationRectangle)得到的 所需要的矩形图绘制,并且做 碰撞检查与这个莫名其妙。

不幸的是它不工作,因为spriteBatch.绘制只适用矩形:(

4 使用一些其他的聪明办法,我不要 知道的。

我不能想象任何魔法到这一点。也许,你可以使用另一个图像要出口罩。但它是极处理价格昂贵。

看看这篇文章在Ziggyware.它是关于 可变形的地形, 可能你在找什么。基本上,这项技术涉及设置的像素你想要隐藏以透明的。

选项3会的工作。

一个更强大的系统(如果你不想要局限于框)将使用每素碰撞的检测。该进程基本原理如下:

  1. 计算一个边界箱(或)对每个对象
  2. 检查看看如果两个物体重叠
  3. 对于每一重叠,位图传送的精灵到一个隐藏的表面,进行比较素值。如果一个象素是已经设定当你尝试画像素从第二雪碧,你有一个碰撞。

这里有一个很好的例署(另Ziggyware的文章,实际上): 2D每一像素的碰撞测

一些更多的链接:

有人可以解释每素检测碰撞

部署2-d/像素的碰撞

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top