关于体感互动Airkinect研究-《案例篇1》

目录:

关于体感互动kinect研究-《基础篇》

关于体感互动Airkinect研究-《案例篇1》

关于体感互动Airkinect研究-《案例篇2》

 

案例一:

目标:实现kinect 控制Air制作的互动。手虚拟控制 移动到“播放影片”,“沙盘体验”上的时候时候,出现水波效果,当水波满后,进入对应页面

 

初步完成,稍后奉上源码,后期更新 kinect手势控制沙盘。 

 

 

 

package 
{

    import flash.display.Sprite;
    import flash.events.Event;
    import flash.ui.Mouse;
    import flash.display.StageDisplayState;
    import com.as3nui.nativeExtensions.air.kinect.Kinect;
    import com.as3nui.nativeExtensions.air.kinect.KinectSettings;
    import com.as3nui.nativeExtensions.air.kinect.events.CameraImageEvent;
    import com.as3nui.nativeExtensions.air.kinect.constants.CameraResolution;
    import flash.display.Bitmap;
    import com.as3nui.nativeExtensions.air.kinect.data.User;
    import com.as3nui.nativeExtensions.air.kinect.data.SkeletonJoint;
    import com.as3nui.nativeExtensions.air.kinect.events.UserEvent;

    public class Main extends Sprite
    {

        private var device:Kinect;
        private var bmp:Bitmap;
        private var skeletonContainer:Sprite;
        private var circle:Circle;
        public function Main()
        {

            if (Kinect.isSupported())
            {
                bmp = new Bitmap  ;
                addChild(bmp);



                skeletonContainer = new Sprite  ;
                addChild(skeletonContainer);

                /*circle = new Circle  ;
                circle.x = -100;
                circle.y = -100;
                skeletonContainer.addChild(circle);*/


                device = Kinect.getDevice();


                device.addEventListener(CameraImageEvent.DEPTH_IMAGE_UPDATE, rgbImageUpdateHandler);
                device.addEventListener(UserEvent.USERS_WITH_SKELETON_ADDED, skeletonsAddedHandler, false, 0, true);
                device.addEventListener(UserEvent.USERS_WITH_SKELETON_REMOVED, skeletonsRemovedHandler, false, 0, true);
                var settings:KinectSettings = new KinectSettings();
                settings.depthEnabled = true;
                settings.skeletonEnabled = true;
                addEventListener(Event.ENTER_FRAME,loop);
                device.start(settings);

            }
        }

        public function skeletonsAddedHandler(event:UserEvent):void
        {
            circle = new Circle  ;
            circle.x = -100;
            circle.y = -100;
            skeletonContainer.addChild(circle);

        }
        public function skeletonsRemovedHandler(event:UserEvent):void
        {

            clearContainer();
        }

        public function loop(e:Event):void
        {

            //clearContainer();
            for each (var user:User in device.usersWithSkeleton)
            {

                var head:SkeletonJoint = user.getJointByName("right_hand");
                circle.x = head.position.depthRelative.x * stage.stageWidth;
                circle.y = head.position.depthRelative.y * stage.stageHeight;





                /*for each (var joint:SkeletonJoint in user.skeletonJoints)
                {
                skeletonContainer.graphics.beginFill(0xff0000)
                skeletonContainer.graphics.drawCircle(joint.position.depth.x,joint.position.depth.y,3)
                skeletonContainer.graphics.endFill()
                
                var circle:Circle = new Circle  ;
                circle.x = joint.position.depth.x;
                circle.y = joint.position.depth.y;
                skeletonContainer.addChild(circle);
                
                }*/

            }
        }
        public function rgbImageUpdateHandler(event:CameraImageEvent):void
        {
            bmp.bitmapData = event.imageData;
        }


        public function clearContainer():void
        {
            while (skeletonContainer.numChildren != 0)
            {
                skeletonContainer.removeChildAt(0);
            }

        }

    }

}

 

 剩下的就只是碰撞检测去进行判断是否选中。

 

转载于:https://www.cnblogs.com/bulolo/archive/2013/04/30/3051931.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值