首页 > 解决方案 > 如何为游戏创建附加组件?

问题描述

我正在尝试为一个看起来有点像这样的游戏(Among Us)制作一个弹出窗口: 1 最后是这样的: 2 这样当你点击它时它会弹出一个侧面的小窗口,然后当您再次单击它时会崩溃(它会有一个功能,但我想我自己可以做到。我只是不知道从哪里开始)。如果它被“集成”到我们当中,我会更喜欢它,所以它会在同一个应用程序上打开,但除此之外,我很高兴每次都必须手动打开它并将其分开。如果有帮助,我有 Microsoft Visualizer。谢谢你。

标签: uwp

解决方案


右折叠视图。我认为。

您可以使用Popup类来实现上述折叠视图。制作一个按钮作为打开指示器来打开或关闭此弹出窗口。如果您希望它顺利运行,您可以添加 Storyboard 以在按钮指示器上方设置动画。有关更多信息,请参阅以下代码。

<Page.Resources>
    <SolidColorBrush x:Key="ButtonBackgroundPointerOver" Color="Transparent" />
    <SolidColorBrush x:Key="ButtonBackgroundPressed" Color="Transparent" />
</Page.Resources>
<Grid x:Name="RootGrid">
    <Popup
        x:Name="RightMeun"
        Width="200"
        Height="{Binding ElementName=RootGrid, Path=ActualHeight}"
        HorizontalAlignment="Right"
        IsOpen="False">

        <Popup.ChildTransitions>
            <TransitionCollection>
                <PaneThemeTransition Edge="Right" />
            </TransitionCollection>
        </Popup.ChildTransitions>
        <Grid
            Width="200"
            Height="{Binding ElementName=RightMeun, Path=Height}"
            Background="LightBlue">
            <TextBlock
                HorizontalAlignment="Center"
                VerticalAlignment="Center"
                Text="Hello" />
        </Grid>
    </Popup>
    <Button
        x:Name="MenuButton"
        Margin="0,0,0,0"
        HorizontalAlignment="Right"
        Background="Transparent"
        BorderThickness="0"
        Click="Button_Click"
        Content="&#xE102;"
        FontFamily="Segoe MDL2 Assets"
        RenderTransformOrigin="0.5,0.5">
        <Button.Resources>
            <ResourceDictionary>
                <ColorPaletteResources
                    x:Key="Default"
                    BaseLow="LightGreen"
                    BaseMediumLow="DarkCyan" />
            </ResourceDictionary>
        </Button.Resources>
        <Button.RenderTransform>
            <CompositeTransform Rotation="180" />
        </Button.RenderTransform>
    </Button>
    <VisualStateManager.VisualStateGroups>
        <VisualStateGroup x:Name="Animation">
            <VisualState x:Name="Close">
                <Storyboard x:Name="CloseStoryboard">
                    <ObjectAnimationUsingKeyFrames Storyboard.TargetName="RightMeun" Storyboard.TargetProperty="IsOpen">
                        <DiscreteObjectKeyFrame KeyTime="0" Value="False" />
                    </ObjectAnimationUsingKeyFrames>
                    <DoubleAnimation
                        Storyboard.TargetName="MenuButton"
                        Storyboard.TargetProperty="(UIElement.RenderTransform).(CompositeTransform.TranslateX)"
                        To="0"
                        Duration="0:0:0" />
                    <DoubleAnimation
                        Storyboard.TargetName="MenuButton"
                        Storyboard.TargetProperty="(UIElement.RenderTransform).(CompositeTransform.Rotation)"
                        To="180"
                        Duration="0:0:0.2" />
                </Storyboard>
            </VisualState>
            <VisualState x:Name="Open">
                <Storyboard x:Name="OpenStoryboard">
                    <ObjectAnimationUsingKeyFrames Storyboard.TargetName="RightMeun" Storyboard.TargetProperty="IsOpen">
                        <DiscreteObjectKeyFrame KeyTime="0" Value="True" />
                    </ObjectAnimationUsingKeyFrames>
                    <DoubleAnimation
                        Storyboard.TargetName="MenuButton"
                        Storyboard.TargetProperty="(UIElement.RenderTransform).(CompositeTransform.TranslateX)"
                        From="0"
                        To="-200"
                        Duration="0:0:0" />
                    <DoubleAnimation
                        Storyboard.TargetName="MenuButton"
                        Storyboard.TargetProperty="(UIElement.RenderTransform).(CompositeTransform.Rotation)"
                        To="0"
                        Duration="0:0:0.2" />
                </Storyboard>

            </VisualState>
        </VisualStateGroup>
    </VisualStateManager.VisualStateGroups>
</Grid>

代码背后

private void Button_Click(object sender, RoutedEventArgs e)
{
    if (RightMeun.IsOpen)
    {
        VisualStateManager.GoToState(this, "Close", true);

    }
    else
    {
        VisualStateManager.GoToState(this, "Open", true);

    }
   
}

推荐阅读