文档章节

AI中的漫游行为,简单模拟了下

童年伊梦
 童年伊梦
发布于 2012/09/25 12:58
字数 425
阅读 174
收藏 0
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;
                                                                                
    /**
     * ...
     * @author  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;
        }
                                                                                    
    }
                                                                                
}

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

看效果演示

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

© 著作权归作者所有

童年伊梦
粉丝 1
博文 29
码字总数 21736
作品 0
浦东
私信 提问
带你深入理解图灵机--什么是人工智能AI?

前两篇文章,讲了图灵所在的时代,图灵根据大数学家希尔伯特提出的数学问题设计出图灵机模型,笔者也通过较长的篇幅介绍了图灵机的组成,运行步骤等,具体的文章内容请看下面两个链接: 带你...

jerry_one
2018/07/07
0
0
人工智能、机器学习、数据挖掘的区别

人工智能、机器学习、数据挖掘的区别 导语 总体来说 分别解释 区别总结 导语 人工智能、机器学习、数据挖掘已然越来越火,我只是听了个耳熟,真正学习才刚刚开始,简单的说一下最近的学习成果...

青青草原一只虫
01/15
0
0
模拟人脑算什么,AI“扮”狗脑了解一下?

 译者 | 林椿眄 编辑 | Just 【导读】通常,我们的人工智能系统都是以人的视角去构造的,这些系统已经用于自动驾驶、人脸识别、操作重型机器,甚至检测疾病。那么,我们可以从动物的角度构...

dqcfkyqdxym3f8rb0
2018/04/18
0
0
全方位搜集汪星人行为数据,让AI学做一只狗 | 华盛顿大学最新研究

     大数据文摘作品   编译:王一丁、万如苑、云舟   波士顿动力的网红机器狗不仅能稳步行走,还能送快递,但是科学家们对狗和AI的畅想远不止于此。   他们想知道,AI从一只汪星人...

大数据文摘
2018/04/28
0
0
浙大的游戏设计教程

第一部分 游戏程序设计概览 计算机游戏简介:什么是游戏、游戏的分类等 游戏的基本开发流程? 游戏开发的基本理念及方法 游戏软件的体系结构:包括三维游戏引擎的架构分析 游戏的调试与测试 ...

Matrix4X4
2012/08/19
361
2

没有更多内容

加载失败,请刷新页面

加载更多

kotlin中奖概率

fun main() { var wins = 0 var chance = 0.2 var playTime = 10// 1000万次 val n = 10000000 (1..n).forEach { if (play(chance, playTime)) win......

oschina4cyy
21分钟前
1
0
第十一讲:爬取猫眼网站上的前100名电影

本次我们来通过翻页爬取的方式爬取猫眼电影里面推荐的前100名电影,并存储到数据库。 1、我们登录猫眼,看下我们的数据在哪里 然后点击今日TOP100,看下具体的网页数据 最下面我们看到底部有...

刘日辉
21分钟前
15
0
git 设置全局用户名/邮箱和某个项目用户名/邮箱/密码

一、特定项目设置用户名/邮箱/密码的方法 找到项目所在目录下的 .git,进入.git文件夹,然后执行如下命令分别设置用户名和邮箱 git config user.name "dawn.he" git config user.email "1...

hexiaoming123
21分钟前
0
0
好程序员分享Linux重器vi编辑器

创建练习文件 [root@tianyun ~]# ll -a > list.txt 文件编辑器 gedit 文件编辑器 vi, vim, nano vi编辑器工作模式 命令模式: a. 光标定位 hjkl 0 $ gg G 3G 进入第三行 /string (n N 可以循...

好程序员IT
22分钟前
2
0
Git整理(五) git cherry-pick的使用

概述 git cherry-pick可以理解为”挑拣”提交,它会获取某一个分支的单笔提交,并作为一个新的提交引入到你当前分支上。 当我们需要在本地合入其他分支的提交时,如果我们不想对整个分支进行...

嘿嘿嘿IT
30分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部