博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
AI中的漫游行为,简单模拟了下
阅读量:6360 次
发布时间:2019-06-23

本文共 5780 字,大约阅读时间需要 19 分钟。

hot3.png

package{    import flash.display.Bitmap;    import flash.display.MovieClip;    import flash.display.Sprite;    import flash.events.Event;    import flash.display.StageScaleMode;    import flash.display.StageAlign;    import flash.events.MouseEvent;    import flash.ui.Mouse;                                                                                    /**     * ...     *   Childhood     */    [SWF(width="454",height="355",frameRate="30")]    public class Main extends Sprite     {        [Embed(source = "../res/bg.jpg")]        private var Background:Class;                                                                                            [Embed(source = "../res/Flying.png")]        private var Fly:Class;        private var customMouseCursor:MovieClip;        private var fly:Bitmap;        private var flySprite:Sprite;        private var flySpriteHalfWidth:Number;        private var flySpriteHalfHeight:Number;        private var speed:Number = 10;        private var friction:Number = 0.95;        private var vx:Number = 0;        private var vy:Number = 0;                                                                                            public function Main():void        {            if (stage) init();            else addEventListener(Event.ADDED_TO_STAGE, init);        }                                                                                            private function init(e:Event = null):void        {            removeEventListener(Event.ADDED_TO_STAGE, init);            getStarted();        }                                                                                            private function getStarted():void        {            stage.scaleMode = StageScaleMode.NO_BORDER;            stage.align = StageAlign.TOP_LEFT;            Mouse.hide();            var bg:Bitmap = new Background();            addChild(bg);                                                                                                    customMouseCursor = new MouseCircle();            addChild(customMouseCursor);            fly = new Fly();            //将苍蝇放到一个精灵中,并将注册点移动到精灵的中心            flySprite = new Sprite();            fly.x = -fly.width / 2;            fly.y = -fly.height / 2;            flySprite.addChild(fly);            flySpriteHalfWidth = flySprite.width / 2;            flySpriteHalfHeight = flySprite.height / 2;            addChild(flySprite);            fly.addEventListener(Event.ENTER_FRAME, flying);            stage.addEventListener(MouseEvent.MOUSE_MOVE, onMove);            stage.addEventListener(Event.MOUSE_LEAVE, onMouseLeave);        }                                                                                            private function flying(e:Event):void        {            var disX:Number = stage.mouseX - flySprite.x;            var disY:Number = stage.mouseY - flySprite.y;            var dis:Number = Math.sqrt(disX * disX + disY * disY);            var angle:Number = Math.atan2(disY, disX);                                                                                                    //shake的关键性代码            vx += (Math.random() * 0.2 - 0.1) * 15;             vy += (Math.random() * 0.2 - 0.1) * 15;                                                                                                     vx *= friction;            vy *= friction;                                                                                                    flySprite.x += vx;            flySprite.y += vy;            //边缘检测            if (flySprite.x + flySpriteHalfWidth > stage.stageWidth) {                flySprite.x = stage.stageWidth - flySpriteHalfWidth;                vx *= -1;            }            else if (flySprite.x - flySpriteHalfWidth < 0) {                flySprite.x = flySpriteHalfWidth;                vx *= -1;            }            if (flySprite.y - flySpriteHalfHeight < 0) {                flySprite.y = flySpriteHalfHeight;                vy *= -1;            }            else if (flySprite.y + flySpriteHalfHeight > stage.stageHeight) {                flySprite.y = stage.stageHeight - flySpriteHalfHeight;                vy *= -1;            }            //靠近鼠标的反应            if (Math.abs(flySprite.x - stage.mouseX) < 50) {                if (Math.abs(flySprite.y - stage.mouseY) < 50) {                    //flySprite.x += -vx;                    //flySprite.y += -vy;                    flySprite.x += (Math.random() * 0.2 - 0.1) * 30 + 3;                     flySprite.y += (Math.random() * 0.2 - 0.1) * 30 + 3;                     flySprite.rotation = Math.random() * 360;                    flySprite.scaleX = 0.8;                    flySprite.scaleY = 0.8;                }            }            else {                flySprite.scaleX = flySprite.scaleY = 1;            }                                                                                                                                                                            }                                                                                            private function onMouseLeave(e:Event):void        {            customMouseCursor.visible = false;        }                                                                                            private function onMove(e:MouseEvent):void        {            customMouseCursor.visible = true;            customMouseCursor.x = stage.mouseX;            customMouseCursor.y = stage.mouseY;        }                                                                                        }                                                                                }

做了一个很简单的效果,就是一个模拟苍蝇飞行的效果。当苍蝇碰到墙壁后会弹回来,碰到鼠标后会有有趣的效果。

7254BDD5E0565D13260D2B6229678F93_426_332.PNG

源码文件下载:http://115.com/file/e7xa2box#AI漫游行为.rar

转载于:https://my.oschina.net/childhood123/blog/80255

你可能感兴趣的文章
《JavaScript应用程序设计》一一3.1 过时的类继承
查看>>
Amazon 推出 API 网关使用计划
查看>>
《基于ArcGIS的Python编程秘笈(第2版)》——2.5 限制图层列表
查看>>
GNOME 地图 3.20 加入更多新特性 可用性得到加强
查看>>
《代码整洁之道:程序员的职业素养》导读
查看>>
《计算复杂性:现代方法》——习题
查看>>
Mozilla 释出更新修复中间人攻击漏洞
查看>>
《慕客网:IOS基础入门之Foundation框架初体验》学习笔记 <一>
查看>>
Spring声明式事务管理之二:核心接口API
查看>>
LNMP环境安装(二)
查看>>
MFC对话框编程-图片控件
查看>>
nodejs启动webserver服务
查看>>
小偷被抓叫嚣:我不偷警察没饭吃
查看>>
python初学—-实现excel里面读数据进行排序
查看>>
用户体验升级后 “谁行谁上”让百度Q4财报更有底气
查看>>
直播相关学习链接
查看>>
使用RPM包工具和源码包编译安装Linux应用程序
查看>>
VoIP——开启免费通话新时代的先锋
查看>>
Linux下rsync的用法
查看>>
apache虚拟主机、日志轮询、日志统计、去版本优化
查看>>