【发布时间】:2020-11-13 13:08:52
【问题描述】:
我有 25 个房间,每个房间都有可以容纳 1 个或多个具有唯一标识的对象的位置。我想为将位置存储在 SQL 数据库中的对象创建一个拖放系统,该数据库已经设置并正在使用中。我目前查找对象,然后手动输入所需的位置。我正在寻找一种图形拖放方式来实现这一点。 我不知道从哪里开始完成这项工作。我什至在想也许游戏引擎会是一个不错的选择,Godot 或 Unity。这是我想到的示例图片。movable tiles
【问题讨论】:
我有 25 个房间,每个房间都有可以容纳 1 个或多个具有唯一标识的对象的位置。我想为将位置存储在 SQL 数据库中的对象创建一个拖放系统,该数据库已经设置并正在使用中。我目前查找对象,然后手动输入所需的位置。我正在寻找一种图形拖放方式来实现这一点。 我不知道从哪里开始完成这项工作。我什至在想也许游戏引擎会是一个不错的选择,Godot 或 Unity。这是我想到的示例图片。movable tiles
【问题讨论】:
所以你有Rooms 和StoredItems。每个Room 包含零个或多个StoredItems,每个StoredItem 恰好存储在一个Room 中。
这是一个简单的一对多关系。在关系数据库中,这是通过为“多”端的项目提供一个外键来实现的,该外键引用它所属项目的主键。
在您的情况下:Rooms 和 StoredItems 都有一个唯一的主键。 StoredItems 还获得一个外键,它指向存储项目的 Room 的 Id。
设置数据库的一种简单且相当直观的方法是使用 nuget 包实体框架。
如果您使用实体框架,您可以使用标准 C# 执行几乎所有查询。实体框架会将它们翻译成数据库语言,通常是 SQL。
如果您使用实体框架,您将拥有以下类:
public class Room
{
public int Id {get; set;}
public string Name {get; set;}
... // other properties
// every Room contains zero ore more StoredItems (one-to-many)
public virtual ICollection<StoredItem> StoredItems {get; set;}
}
public class StoredItem
{
public int Id {get; set;}
... // other properties
// Every StoredItem is stored in exactly one Room, using foreign key
public int RoomId {get; set;}
public virtual Room Room {get; set;}
}
所以你会有以下表格
Room StoredItem
Id .. Id RoomId ...
01 ... 01 01
02 ... 02 01
Etc. 03 03
04 02
05 02
06 05
从这些表可以看出,StoredItem[04]存储在Room[02]中,而Room[01]包含两个StoredItem,分别是StoredItem[01]和[02]
如果您想了解更多关于实体框架的信息,请访问Entity Framework tutorial
【讨论】:
pickable_input = true 来完成。这将允许您检测其中的鼠标事件并更新特定项目的位置。 position = get_global_mouse_position() 每一帧 - 创建拖动效果。