我正在构建我的第一个广告资源,我希望它能像其他任何基本广告资源一样工作:
我得到了一些基本的东西,如:
就是这样。
所以现在我陷入了涉及如何处理项目的部分,我知道有几种方法可以处理项目,但我不知道在我当前的代码中最简单的方法是什么使用。
如果有人能指出我正确的方向,我会非常感激,这会为我节省很多时间!
这是代码btw:
class InventorySlots
{
Texture2D box;
Texture2D blackbox;
Texture2D empty;
const int offSet = 100;
Rectangle[,] Inventoryslots = new Rectangle[6, 4];
Rectangle testrect; // Rect for moving item
bool isMoving;
public void LoadContent(ContentManager Content)
{
box = Content.Load<Texture2D>("Box");
blackbox = Content.Load<Texture2D>("boxselected");
testrect = new Rectangle(10, 20, box.Width, box.Height);//Set up my test rect
empty = box;
for (int x = 0; x < 6; x++)
{
for (int y = 0; y < 4; y++)
{
Inventoryslots[x, y] = new Rectangle((x * box.Width) + offSet, // Setup my inventory slots
(y * box.Height) + offSet, box.Width, box.Height);
}
}
}
public void Update(GameTime gameTime)
{
if ((ButtonState.Pressed == Mouse.GetState().LeftButton))
{
if (testrect.Intersects(new Rectangle(Game1.mousePosition.X, Game1.mousePosition.Y, 0, 0)))
{
isMoving = true;
}
}
else
{
isMoving = false;
}
if (isMoving)
{
testrect = new Rectangle(Game1.mousePosition.X - testrect.Width / 2, Game1.mousePosition.Y - testrect.Height / 2, testrect.Width, testrect.Height);
}
}
public void Draw(SpriteBatch spriteBatch)
{
for (int x = 0; x < 6; x++)
{
for (int y = 0; y < 4; y++)
{
if (Inventoryslots[x, y].Contains(Game1.mousePosition))
{
empty = box;
}
else if (!Inventoryslots[x, y].Contains(Game1.mousePosition))
empty = blackbox;
spriteBatch.Draw(empty, Inventoryslots[x, y], Color.White);
}
}
spriteBatch.Draw(box, testrect, Color.White);//Draw my test item that i can move around
}
}
答案 0 :(得分:1)
您所拥有的代码表明缺乏对面向对象原则的理解,游戏中的所有内容都应该是对象或界面。
public class Item
{
private Texture2D texture;
private Vector2 position;
public Vector2 Position { get {return position; } }
private Rectangle Bounds;
public bool Collides(Vector2 position)
{
Bounds = new Rectangle(this.position.X, this.position.Y,
this.texture.width, this.texture.height);
if (Bounds.Intersects(position))
return true;
else return false;
}
}
使用面向对象编程的原则,你可以从项目基类派生出一个特定的项目,如下所示:
public class Sword : Item
{
public Sword() { }
}
OOP背后的想法是,代码中的所有内容都按字面表示,基类包含封装其所有派生子代的属性和函数。所以Sword会继承位置,界限,纹理等等。
这很聪明,因为它允许您对事物进行一次编程,然后为每个项目重复使用该代码。
我不打算为你编写代码,但首先要定义你的项目:
private Item[,] Inventoryslots = new Item[6, 4];
我将把这个保持在最低限度,因为我没有很多时间,但如果我能指出你的方向,那就是在C#计算机编程语言中学习更多关于面向对象原理的知识。谷歌,你和你是金。
答案 1 :(得分:0)
库存是游戏的重要组成部分。你可以列出的项目,例如从头部写的。
Public Class Item
Public ID as integer // id of item (apple=1, hammer=2)
Public Position as vector2 // position in your inventory
Public Equiped as boolean = false;
End Class
Public Class Items
Inherit List of(Item)
Sub Add(id)
dim Item as new Item
Item.ID = id
// find first free slot and apply position to Item.Position
me.add(Item)
End Sub
Sub Remove(id)
me.removeAll(function(c) c.id = id)
End Sub
Sub Relocate(id, newPostion)
// example of looping
For Each Item as Item in Me
If Item.ID = id Then
Item.Position = newPosition
End If
Next
End Sub
Sub Equip(id)
Dim Item as Item = me.find(function(c) c.id=id)
Item.Equiped = true;
End Sub
End Class
您可以像这样创建枚举器:
Enum InventoryItems
1 = Apple
2 = Sword
End
你声明主要可变:Public Inventory as New Items
。要使用枚举器添加新项目:Inventory.Add(InventoryItems.Apple)
但是添加功能必须接受枚举。
当你理解它的运作方式时,它并不复杂。