首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >碰撞检测仅添加一次+1,而不是多次物体碰撞

碰撞检测仅添加一次+1,而不是多次物体碰撞
EN

Stack Overflow用户
提问于 2011-05-01 02:36:43
回答 1查看 205关注 0票数 1
代码语言:javascript
复制
<UserControl x:Class="CatGame.MainPage"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="d"
    d:DesignHeight="480" d:DesignWidth="640"  KeyDown="UserControl_KeyDown">
    <Canvas x:Name="LayoutRoot" Background="white">
    <Image Source="level1.jpg"></Image>
    <TextBlock FontSize="24" Canvas.Left="700" Canvas.Top="90" Name="score">/TextBlock>        
    </Canvas>
</UserControl>



if (DetectCollisionZero(myCat, myZero))
          {
           int scoreAsInt;
           if (Int32.TryParse(score.Text, out scoreAsInt) != null)
               {
                   scoreAsInt = scoreAsInt + 1;
                   score.Text = scoreAsInt.ToString();
               }
               LayoutRoot.Children.Remove(myZero);
             }

     public bool DetectCollisionZero(ContentControl myCat, ContentControl myZero)
             {

                 Rect myCatRect = new Rect(
                         new Point(Convert.ToDouble(myCat.GetValue(Canvas.LeftProperty)),
                                              Convert.ToDouble(myCat.GetValue(Canvas.TopProperty))),
                                      new Point((Convert.ToDouble(myCat.GetValue(Canvas.LeftProperty)) + myCat.ActualWidth),
                                              (Convert.ToDouble(myCat.GetValue(Canvas.TopProperty)) + myCat.ActualHeight))
                              );

                 Rect myZeroRect = new Rect(
             new Point(Convert.ToDouble(myZero.GetValue(Canvas.LeftProperty)),
                                             Convert.ToDouble(myZero.GetValue(Canvas.TopProperty))),
                                     new Point((Convert.ToDouble(myZero.GetValue(Canvas.LeftProperty)) + myZero.ActualWidth),
                                             (Convert.ToDouble(myZero.GetValue(Canvas.TopProperty)) + myZero.ActualHeight))
                             );

                 myCatRect.Intersect(myZeroRect);
                 return !(myCatRect == Rect.Empty);
             }

我基本上有一只猫撞上了一个物体(myZero),当这种情况发生时,我的分数应该加+1,但是一旦(myZero)被移除,用户仍然可以通过物体所在的位置获得更多积分。

我怎么才能做到只加1分呢?

EN

回答 1

Stack Overflow用户

发布于 2011-05-02 02:11:28

在从画布中删除myZero之后,您为什么要期望这样做会有所不同呢?你的碰撞检测方法只是读取决定myZero的边界框的属性(不会因为你从集合中移除它而改变的属性),将其与myCat的边界框进行比较,并决定它们是否相交。DetectCollisionZero中的任何东西都不会因为myZero是否仍在LayoutRoot.Children集合中而有所不同。

如果你想让它做一些不同的事情,你必须编写一些代码来检查你感兴趣的条件(myZero不再被认为是游戏板的一部分),并做出适当的反应(在检查冲突时不再返回true )。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5843829

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档