如何使TextBlock像C#XAML中的分数计数器一样工作

时间:2011-04-30 01:36:53

标签: c# wpf xaml

<Canvas x:Name="LayoutRoot" Background="white">
    <Image Source="level1.jpg"  Name="bg" Width="640" Height="480"
           Canvas.Top="10" Canvas.Left="50"/>
    <TextBlock Name="score">Scorehere</TextBlock> 
</Canvas>
void CompositionTarget_Rendering(object sender, EventArgs e)
{         
    if (DetectCollisionLeft(myCat, myZero))
    {
        LayoutRoot.Children.Remove(myZero);                    
    }
}

我基本上拥有的是当我的游戏中的猫与数字0碰撞时数字消失。如何在XAML中获取TextBlock以显示每次收集数字时都会增加的数字。

谢谢

2 个答案:

答案 0 :(得分:1)

根据我的理解您的问题陈述,您希望每次检测到碰撞时更新分数。如果是,则只需更新TextBlock.Text属性即可更新分数。

void CompositionTarget_Rendering(object sender, EventArgs e)
{         
    if (DetectCollisionLeft(myCat, myZero))
    {
        if(LayoutRoot.Children.Contains(myZero))
        {
            LayoutRoot.Children.Remove(myZero);

            //Update the score as score = previousScore + 1
            int scoreAsInt;
            if(Int32.TryParse(score.Text, NumberStyles.Integer, CultureInfo.CurrentCulture, out scoreAsInt) != null)
            {
                scoreAsInt = scoreAsInt + 1;
                score.Text = scoreAsInt.ToString(CultureInfo.CurrentCulture);
            }
        }
    }
}

请注意,您必须考虑整数范围内分数过大的情况。在这种情况下,您可以重置分数或使用较大的类型,例如分数。

答案 1 :(得分:0)

我的第一个建议是你需要将你的逻辑与视觉效果分开。这可以通过使用MVVM pattern,或者通过为得分和cat编写数据模型类并在那里移动逻辑来完成。对于像这样的简单项目,MVVM可能有点过分,但是当可视化数据和逻辑混合时,很快就会出现不必要的问题和复杂性。

话虽如此,这是对你的问题的简单回答。如果您想在屏幕上保留分数并只是更新它,则根本没有理由将其删除。只需更新文本值并将其移动到画布中的新随机位置即可。像这样:

   if (DetectCollisionLeft(myCat, myZero))
   {
       Random rand = new Random();
       score.Text = int.Parse(score.Text) + 1;

       // Measure text for new random position
       score.Measure(new Size(double.PositiveInfinity, double.PositiveInfinity));

       // Set the position of the text
       Canvas.SetLeft(score, rand.Next(640 + 10 - score.DesiredSize.Width));
       Canvas.SetTop(score, rand.Next(480 + 10 - score.DesiredSize.Height));
   }

可以有更好的方法来随机化分数的位置。例如,传递屏幕/父容器的宽度而不是使用硬编码值640和480会更好。希望这会指向正确的方向。

相关问题