我必须告诉你,我对XNA完全不熟悉,而且我对顶点,多重采样等都不了解。
但是,我喜欢这么多编程和Windows手机,我想要开始一个巨大的挑战......创建一个XNA游戏! :d
好吧,让我们停止讲故事并开始解释..我正在制作一款大型游戏......我已经为它工作了将近一个月,现在已经快结束了......
我只是一个大问题,这是游戏的中心点......想想它作为一个1024x800拼图,每个拼图点都可以点击,当点击它时它必须改变颜色..
所以我们有两个难点要做, 1)理解我点击的那个棋子 2)颜色这个部分
我想到了两种方法
第一种方法
1个PNG大拼图背景1024x800
每个拼图的N PNG,片周围有透明层(每片都是1024x800,位置正确)
通过合并N + 1 PNGS我们有完整的谜题,现在,它真的很容易理解我点击了哪一块,因为我只需循环N个纹理,当我得到一个没有透明的那个在点击的像素,我是一块! 然后,为了它的颜色,我只是为绘制部分中的纹理着色。
这很容易,问题是如果我必须拖动,缩放,50 * 4 png,它真的很慢:(
第二种方法
1个PNG大拼图1024x800与所有拼图合并,每个拼图会有不同的颜色填充,例如,1)250,250,250 2)245,245,245等
加载PNG后,我通过使用每个部分的GetData计算像素索引,并将其存储在每个部分的数组中
为了获得所选的部分,很容易..我只是计算y * width + x并获得该数组上该值的部分。
问题是,当我要着色时..我要迭代数组并改变RGB然后最后做一个SetData ..它需要1秒才能对那块进行校对..这可能是可以接受的......但是我想要更好......
第二种方法在拖动和缩放时的速度要快得多,因为它只有1个PNG,而且我可以使用更大的分辨率,这是迄今为止最好的方法任何建议??
谢谢,
卢卡
答案 0 :(得分:2)
所以你有一个1024x800的拼图,每个像素都是一块?您不打算为每个像素制作819200个图像文件或定义819200个个体行为。
你需要(好吧,应该)为此使用面向对象的概念。以下是我认为您应该采取的路径的基本概念:
定义“Piece”类。这件作品代表了一个游戏作品。
在Piece类中,定义一个矩形,代表棋盘上的这个棋子。如果您的作品是不规则形状(如S tetronimo等),请定义多个矩形。如果您有多种不同类型的片段(和不同的形状),您将需要使用继承并使每个不同类型的片段继承自Piece类,但定义自己的矩形。但是,如果您的“片段”只是屏幕上的像素,则只需制作1x1矩形。
使用SpriteBatch用颜色填充矩形。您可以使用单个白色像素png并拉伸它以填充矩形以及指定颜色。
使用矩形触摸测试您的作品。如果触摸属于您的矩形,则您已选择该块。如果你的作品只有1个像素,那就更容易了:只需在触摸位置的X和Y值上查找它。
现在对于游戏板:根据棋子的形状和可能的位置,您需要选择一种存储方式。如果你的所有作品都是正方形,你可以将它们存储在2D数组中。否则你可能会使用一张地图,其中键是作品的位置,而值是作品本身。
此方法的基本摘要:不要尝试将您的电路板存储在单个纹理中。写入/读取纹理数据很慢,并且不会使纹理充当数据结构。相反,将您的作品存储为单个对象。迭代每一块并将其绘制到屏幕上。