背景:游戏由可点击的牡蛎组成,必须将它们移动到屏幕上消失的另一个位置。牡蛎(节点)具有图像,矩形,位置和下一节点数据。在draw方法中,我有一个表示节点数的计数器。每次迭代都会调用遍历方法。循环完成后,遍历列表的变量将重置为列表的头部。只绘制了25个节点中的一个。
_oysterSLL.placeholder = _oysterSLL.moveAddress;
GraphicsDevice.Clear(Color.CornflowerBlue);
spriteBatch.Begin();
spriteBatch.Draw(Bins.T2DrepresentativeImage, Bins.V2location, Color.White);
for (int i = _oysterSLL.count; i > 1; --i)
{
_oysterSLL.traverseList(_oysterSLL.moveAddress);
spriteBatch.Draw(_oysterSLL.moveAddress.T2DrepresentativeImage, _oysterSLL.moveAddress.V2location, Color.White);
}
_oysterSLL.moveAddress = _oysterSLL.placeholder;
spriteBatch.End();
base.Draw(gameTime);
问题:如何绘制每个节点而不是最后一个节点?
感谢您的帮助。我对编程很新,任何建议都将不胜感激!
编辑:我在下面添加了_oysterSLL类代码。使用的实用程序类中唯一的继承变量是count变量,它是一个int。感谢您的建议,我希望我包含LinkedList类是有帮助的。我想我想避免使用数组,因为当用户将牡蛎移动到目标时我想释放内存。但是,我可以看到我在不使用索引的情况下使用for循环是多么荒谬。
namespace Oyster
{
class LinkedList : Utility
{
private Oyster _head, _tail, _placeholder, _moveAddress;
public LinkedList()
{
}
public Oyster head
{
get { return _head; }
set { _head = value;}
}
public Oyster tail
{
get { return _tail; }
set { _tail = value; }
}
public Oyster placeholder
{
get { return _placeholder; }
set { _placeholder = value; }
}
public Oyster moveAddress
{
get { return _moveAddress; }
set { _moveAddress = value; }
}
public void oysterAddSLL(Oyster newOyster)
{
if (_head == null)
{
_head = newOyster;
_tail = newOyster;
_placeholder = newOyster;
_moveAddress = newOyster;
count++;
}
else
{
_tail = newOyster;
_head.Next = _tail;
_head = _tail;
count++;
}
}
public void traverseList(Oyster node)
{
node = node.Next;
}
public void nodeDeletion( Oyster toBeDeleted, Oyster toDirect)
{
toDirect.Next = toBeDeleted.Next;
}
}
答案 0 :(得分:1)
我不知道我是否完全理解你的代码(变量命名让我感到困惑),或者不是,但让我试一试:
我可以看到你正在迭代牡蛎的集合,但你总是绘制相同的牡蛎。
如果您根本不使用循环索引,那么使用for
循环有什么意义呢?
我认为你的问题可以通过解决每个职位的牡蛎来解决,基本上是这样的:
for (int i = _oysterSLL.Count; i > 1; --i)
{
_oysterSLL.traverseList(_oysterSLL[i].moveAddress);
spriteBatch.Draw(_oysterSLL[i].moveAddress.T2DrepresentativeImage, _oysterSLL[i].moveAddress.V2location, Color.White);
}
正如您所看到的,在draw方法中,我现在使用索引变量(_oysterSLL[i]
)来确定它包含的每个对象。
但考虑到这一点,并且没有与_oysterSLL
集合中的对象相对应的代码,很难理解它的作用。