• 《AdvancED ActionScript 3.0 Animation》读书笔记(1) —— 转向行为


    1)寻找:


    public function seek(target: Vector2D): void

    {

    var desiredVelocity: Vector2D = target.subtract(_position);

    desiredVelocity.normalize();

    desiredVelocity = desiredVelocity.multiply(_maxSpeed);

    var force: Vector2D = desiredVelocity.subtract(_velocity);

    _steeringForce = _steeringForce.add(force);

    }



    2)避开:


    public function flee(target: Vector2D): void

    {

    var desiredVelocity: Vector2D = target.subtract(_position);

    desiredVelocity.normalize();

    desiredVelocity = desiredVelocity.multiply(_maxSpeed);

    var force: Vector2D = desiredVelocity.subtract(_velocity);

    _steeringForce = _steeringForce.subtract(force);

    }



    3)到达:


    public function arrive(target: Vector2D): void

    {

    var desiredVelocity: Vector2D = target.subtract(_position);

    desiredVelocity.normalize();

    var dist: Number = _position.dist(target);

    if(dist > _arrivalThreshold)

    {

    desiredVelocity = desiredVelocity.multiply(_maxSpeed);

    }

    else

    {

    desiredVelocity = desiredVelocity.multiply(_maxSpeed * dist /

    _arrivalThreshold);

    }

    var force: Vector2D = desiredVelocity.subtract(_velocity);

    _steeringForce = _steeringForce.add(force);

    }



    4)追捕:


    public function pursue(target: Vehicle): void

    {

    var lookAheadTime: Number = position.dist(target.position) / _maxSpeed;

    var predictedTarget: Vector2D =

    target.position.add(target.velocity.multiply(lookAheadTime));

    seek(predictedTarget);

    }



    5)躲避:


    public function evade(target: Vehicle): void

    {

    var lookAheadTime: Number = position.dist(target.position) / _maxSpeed;

    var predictedTarget: Vector2D =

    target.position.add(target.velocity.multiply(lookAheadTime));

    flee(predictedTarget);

    }



    6)漫游:




    init (){

    private var _wanderAngle: Number = 0;

    private var _wanderDistance: Number = 10;

    private var _wanderRadius: Number = 5;

    private var _wanderRange: Number = 1;

    }


    public function wander(): void

    {

    var center: Vector2D = velocity.clone().normalize().multiply(_wanderDistance);

    var offset: Vector2D = new Vector2D(0);

    offset.length = _wanderRadius;

    offset.angle = _wanderAngle;

    _wanderAngle += Math.random() * _wanderRange - _wanderRange * .5;

    var force: Vector2D = center.add(offset);

    _steeringForce = _steeringForce.add(force);

    }


  • 相关阅读:
    批量重命名工具 Bulk Rename Utility
    Makefile中的ifeq 多条件使用
    利用Python批量下载邮件附件
    在线随机抽取工具、在线汉字转拼音
    《如何把事情做到最好》读书笔记
    Android 通过adb快速恢复出厂设置
    Makefile的ifeq逻辑或,逻辑与的变通实现
    Android 获取后台正在运行的第三方应用列表
    Android.mk 中 filter 和 filterout 的用法
    Android TV端电视直播软件 和 投屏工具
  • 原文地址:https://www.cnblogs.com/cly84920/p/4426490.html
Copyright © 2020-2023  润新知