WEB开发网
开发学院软件开发C语言 C#开发WPF/Silverlight动画及游戏系列教程(Game T... 阅读

C#开发WPF/Silverlight动画及游戏系列教程(Game Tutorial):(四十五)制作精美的可任意拖放对象的物品栏及装备栏

 2010-09-30 22:35:31 来源:WEB开发网   
核心提示:在通常的网络游戏中,物品、装备、技能、快捷按钮等窗口中的图标都是可以相互拖放的,C#开发WPF/Silverlight动画及游戏系列教程(Game Tutorial):(四十五)制作精美的可任意拖放对象的物品栏及装备栏,不同的栏目有着不同的限制,例如技能图标不能拖放到物品栏及装备栏中,我们还得在ListBox的模版改造

在通常的网络游戏中,物品、装备、技能、快捷按钮等窗口中的图标都是可以相互拖放的,不同的栏目有着不同的限制,例如技能图标不能拖放到物品栏及装备栏中,且不是所有的魔法技能都可以拖放(如被动技能等);而非装备类的所有物品则无法拖放到角色的装备栏中。那么本节我将向大家讲解如何在本教程示例游戏中添加物品栏及装备栏,并实现它们之间双向物品交换的两种模式:拖放模式和双击模式。

首先制作物品栏。这里我使用的是官方的工具toolkit:ListBoxDragDropTarget,只需设置它的DragDrop.AllowDrop="True",那么它内部的ListBox类型容器中的所有Item将均可以被拖放。相关示例大家可以参考紫色永恒的这篇文章:最新Silverlight Toolkit中的Drag&Drop支持。

仅仅使用ListBox的默认配置还是与实际游戏中的物品栏容器显示相距太远,物品栏直观上给我们的印象是一个N*M的网格形容器,里面的对象是图标,对内对外都应能做到任意拖放。为了满足上述需求,我们还得在ListBox的模版改造上下些工夫。

默认情况下, ListBoxDragDropTarget内部拖放时并不能作用于virtualized容器(ListBox的默认容器),因此我们首先需要重写ItemsPanel 的ItemsPanelTemplate来实现ListBox内部子对象之间能相互拖放:

       <toolkit:ListBoxDragDropTarget x:Name="dragDropTarget" window:DragDrop.AllowDrop="True">
            <ListBox x:Name="listBox" ……>
                <ListBox.ItemsPanel>
                    <ItemsPanelTemplate>
                        <StackPanel />
                    </ItemsPanelTemplate>
                </ListBox.ItemsPanel>
            </ListBox>
        </toolkit:ListBoxDragDropTarget>

1 2 3 4  下一页

Tags:开发 WPF Silverlight

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接