【问题标题】:Move tiles/textbox store location in db [closed]在数据库中移动图块/文本框存储位置[关闭]
【发布时间】:2020-11-13 13:08:52
【问题描述】:

我有 25 个房间,每个房间都有可以容纳 1 个或多个具有唯一标识的对象的位置。我想为将位置存储在 SQL 数据库中的对象创建一个拖放系统,该数据库已经设置并正在使用中。我目前查找对象,然后手动输入所需的位置。我正在寻找一种图形拖放方式来实现这一点。 我不知道从哪里开始完成这项工作。我什至在想也许游戏引擎会是一个不错的选择,Godot 或 Unity。这是我想到的示例图片。movable tiles

【问题讨论】:

    标签: c# unity3d godot


    【解决方案1】:

    所以你有RoomsStoredItems。每个Room 包含零个或多个StoredItems,每个StoredItem 恰好存储在一个Room 中。

    这是一个简单的一对多关系。在关系数据库中,这是通过为“多”端的项目提供一个外键来实现的,该外键引用它所属项目的主键。

    在您的情况下:RoomsStoredItems 都有一个唯一的主键。 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

    【讨论】:

    • 很好地解释了幕后的逻辑。至于实现 UI,这可以在 Godot 中通过设置您的 StoredItems pickable_input = true 来完成。这将允许您检测其中的鼠标事件并更新特定项目的位置。 position = get_global_mouse_position() 每一帧 - 创建拖动效果。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-07
    • 1970-01-01
    • 1970-01-01
    • 2020-12-07
    • 2021-09-13
    • 1970-01-01
    相关资源
    最近更新 更多