{ var dragableItem = o -6ren">
gpt4 book ai didi

c# - Windows 8 应用程序 : "Snapping" Drag and Drop for Card Game

转载 作者:太空宇宙 更新时间:2023-11-03 16:15:21 26 4
gpt4 key购买 nike

在尝试使用以下代码片段移动卡片(现在是图片)后,我对结果并不满意。

Card.ManipulationDelta += (o, args) => {
var dragableItem = o as Image;
if (dragableItem == null) return;
var translateTransform = dragableItem.RenderTransform as TranslateTransform;

if (translateTransform == null) return;
translateTransform.X += args.Delta.Translation.X;
translateTransform.Y += args.Delta.Translation.Y;
};
Card.RenderTransform = new TranslateTransform();

控件有一个有趣的行为,可以加速并且在“放下”它之后会移动/滑动一点。虽然很酷,但我不想要这种行为,因此改变了主意:我正在寻找的是一种为一张事件卡片定义特定区域的解决方案,一个用于放置更多卡片的长凳和用于甲板的堆栈,以便可以自由拖动一张牌,但只有在这些特定区域上方才能丢弃它,否则它会回到指定的手牌区域。

我可以尝试什么来实现这种期望的行为?

最佳答案

我认为你和我在同一条船上,我正在开发一个 Metro 纸牌游戏应用程序,我对拖放方面的发现不太满意。我最初的方法是有一个网格\堆栈面板或其他底层框架,用户可以将卡片图像(实际上是自定义控件)拖到上面,然后当用户放手时图像将捕捉到该框架。我还没有找到一种合适的方法来获得这种行为,因为 Metro 似乎不支持将控件从一个父级拖放到另一个父级。

就您的问题而言,您所指的滑动效果很可能是惰性,您可以通过不设置 TranslateInertia 模式来禁用它,例如

    Ellipse el = new Ellipse();
el.Fill = new SolidColorBrush(Windows.UI.Colors.Magenta);
el.ManipulationMode = (ManipulationModes.All ^ MainipulationModes.TranslateInteria);

//more code to add your ManipulationDelta handler etc.

您还可以通过为 MainipulationInertiaStarting 添加一个处理程序来获得对 Interia 的一些控制,尽管只是在处理程序中设置 e.Handled = true 并不会像其他人建议的那样对我完全禁用 interia。

我很想听听你的回音,看看你想出了什么方法来捕捉卡片,在这一点上,我正在考虑只使用一个大的 Canvas 对象并编写我自己的鼠标移动客户处理程序来获取卡片对象可拖动,然后对齐到游戏板上的一行或其他位置。

干杯,

詹姆斯

关于c# - Windows 8 应用程序 : "Snapping" Drag and Drop for Card Game,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15953759/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com