前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >[Silverlight动画]转向行为 - 躲避行为

[Silverlight动画]转向行为 - 躲避行为

作者头像
用户1172164
发布2018-01-16 11:53:31
1K0
发布2018-01-16 11:53:31
举报
文章被收录于专栏:我和未来有约会

躲避就是追捕的反行为。就像追捕类似于寻找,躲避类似于避开。

本质上讲,是预测出机车将要去到的位置并远离它。在这里所有的原则都和追捕相同。实际上,就连实现都几乎一模一样,除了最后一行用避开代替寻找:

代码语言:javascript
复制
                public void evade(Vehicle target)
        {
            double lookAheadTime = position.dist(target.position) / _maxSpeed;
            Vector2D predictedTarget = target.position.add(target.velocity.multiply(lookAheadTime));
            flee(predictedTarget);
        }

直接把追捕和躲避放一起测试:

代码语言:javascript
复制
<UserControl
	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"
	xmlns:local="clr-namespace:Steer" xmlns:ed="http://schemas.microsoft.com/expression/2010/drawing"
	mc:Ignorable="d"
	x:Class="Steer.PursueEvadeTest"
	d:DesignWidth="640" d:DesignHeight="480">

	<Grid x:Name="LayoutRoot" Background="White">
		<local:SteeredVehicle x:Name="myPursuer" HorizontalAlignment="Left" Height="40" VerticalAlignment="Top" Width="40" RenderTransformOrigin="0.5,0.5">
			<ed:RegularPolygon Fill="Blue" Height="40" InnerRadius="1" PointCount="3" Stretch="Fill" Stroke="Black" UseLayoutRounding="False" Width="40" RenderTransformOrigin="0.5,0.5" StrokeThickness="0">
				<ed:RegularPolygon.RenderTransform>
					<CompositeTransform Rotation="90"/>
				</ed:RegularPolygon.RenderTransform>
			</ed:RegularPolygon>
		</local:SteeredVehicle>
		<local:SteeredVehicle x:Name="myEvader" HorizontalAlignment="Left" Height="40" VerticalAlignment="Top" Width="40" RenderTransformOrigin="0.5,0.5">
			<ed:RegularPolygon Fill="#FFFD00FF" Height="40" InnerRadius="1" PointCount="5" Stretch="Fill" Stroke="Black" StrokeThickness="0" UseLayoutRounding="False" Width="40"/>
		</local:SteeredVehicle>

	</Grid>
</UserControl>
代码语言:javascript
复制
using System;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Ink;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;

namespace Steer
{
	public partial class PursueEvadeTest : UserControl
	{
		public PursueEvadeTest()
		{
			// Required to initialize variables
			InitializeComponent();
            Loaded += new RoutedEventHandler(PursueEvadeTest_Loaded);
		}

        void PursueEvadeTest_Loaded(object sender, RoutedEventArgs e)
        {
            myPursuer.position = new Vector2D(200, 200);
            myPursuer.edgeBehavior = Vehicle.BOUNCE;

            myEvader.position = new Vector2D(400, 300);
            myEvader.edgeBehavior = Vehicle.BOUNCE;

            CompositionTarget.Rendering += new EventHandler(CompositionTarget_Rendering);
        }

        void CompositionTarget_Rendering(object sender, EventArgs e)
        {
            myPursuer.pursue(myEvader);
            myEvader.evade(myPursuer);

            myPursuer.update();
            myEvader.update();
        }
	}
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2010-07-18 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档