/Files/hero82748274/ddd.swf

这次使用Flex 与sandy引擎库进行一个简单3d模拟。在制作过程中使用了flex一些组件配置一些内嵌图片进行贴图。

Code<?xml version="1.0"encoding="utf-8"?><mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"layout="absolute"creationComplete="init()"><mx:Script><![CDATA[
            import mx.events.ListEvent;
            import mx.core.UIComponent;
            import sandy.core.Scene3D;
            import sandy.core.scenegraph.
*;
            import sandy.primitive.
*;
            import sandy.core.data.
*;
            import sandy.materials.
*;
            import sandy.materials.attributes.
*;privatevar scenne:Scene3D;privatevar camera:Camera3D;privatevar ranY:Number=0.5;privatevar box:Box;

[Embed(source="skin.jpg")]
            [Bindable]
publicvar imgCls:Class;//嵌入图片资源privatevar bt:Bitmap=newimgCls()asBitmap;
            [Bindable]
privatevar myxml:XML=<item><skin><myskin>默认皮肤</myskin></skin><skin><myskin>黄色皮肤</myskin></skin></item>;privatevar app:Appearance;privatevar app2:Appearance;privatefunction init():void{  
                var ui:UIComponent
=newUIComponent();//创建一个组件var sprite:Sprite=newSprite();
                ui.addChild(sprite);
                canvas.addChild(ui);
//添加容器camera=newCamera3D(300,300);//创建一个摄影机camera.z=-400;
                var root:Group
=createScene();
                scenne
=newScene3D("scene1", sprite, camera, root);
                addEventListener(Event.ENTER_FRAME, Run);
                addEventListener(MouseEvent.MOUSE_WHEEL, mouseWheel);
this.addEventListener(KeyboardEvent.KEY_DOWN, keydown);
                ui.setFocus();

}privatefunction createScene():Group
            {
                var g:Group
=newGroup();
                box
=newBox("box",100,100,100);
                var materialAttr:MaterialAttributes
=newMaterialAttributes(newLineAttributes(0.5,0x2111BB,0.4),newLightAttributes(true,0.1));//创建材质属性,线性光,var material:Material=newColorMaterial(0xFFCC33,1, materialAttr);//创建颜色材质var material2:Material=newBitmapMaterial(bt.bitmapData);//创建图片贴图material.lightingEnable=true;//开启光线app=newAppearance(material);//为物体创建材质表面app2=newAppearance(material2);
                box.rotateX
=10;
                box.rotateY
=0;
                box.appearance
=app;//指定材质表面//box.appearance=app2;g.addChild(box);
                box.rotateX
=30;
                box.rotateY
=30;
                g.addChild(box);
returng;

}privatefunction Run(event:Event):void{
                scenne.render();
//渲染场景box.rotateX+=1;//让立方体会在x轴上旋转box.rotateY+=1;//让立方体会在y轴上旋转}privatefunction mouseWheel(event:MouseEvent):void{if(event.delta>0)
                {
                    camera.z
+=12;//向前滚动的时候向前滚动}else{
                    camera.z
-=12;//向后滚动}

}privatefunction keydown(event:KeyboardEvent):void{
                trace(
"dd");if(event.keyCode==Keyboard.UP)
                {
                    trace(
"dds");
                    camera.z
+=12;
                }
elseif(event.keyCode==Keyboard.DOWN)
                {
                    camera.z
-=12;//使用摄影机来控制深度}elseif(event.keyCode==Keyboard.LEFT)
                {
                    camera.pan
+=2;
                }
elseif(event.keyCode==Keyboard.RIGHT)
                {
                    camera.pan
-=2;
                }
else{
                }

}privatefunction seletSkin(event:ListEvent):void{//trace(event.target.selectedItem);//box.appearance=app2;if(event.currentTarget.selectedItem=="默认皮肤")
                    box.appearance
=app;elsebox.appearance=app2;

}
        ]]></mx:Script><mx:Canvas id="canvas"x="72"y="66"width="411"height="359"></mx:Canvas><mx:ComboBox id="mycombox"change="seletSkin(event)"dataProvider="{myxml..myskin}"x="400"y="36"focusEnabled="false"></mx:ComboBox><mx:Label x="348"y="38"text="皮肤选择"width="54"/></mx:Application>

一,创建了一个立方体后,在原有基础上,增加一个鼠标互动。

addEventListener(MouseEvent.MOUSE_WHEEL ,mouseWheel);

private function mouseWheel(event:MouseEvent):void
  {  
     if (event.delta>0)
   {
    camera.z+=12;//向前滚动的时候向前滚动
   } else
   {
    camera.z-=12;//向后滚动
   }
  
  }

使用鼠标滑轮让立方体产生一种透视的感觉,好像摄影机推镜和拉镜一样。

二,我们希望在程序加上键盘交互?

this.addEventListener(KeyboardEvent.KEY_DOWN,keydown);
  ui.setFocus();

三,如何进行皮肤贴图?

我们希望为立方体创建贴图

 [Embed(source="skin.jpg")]
           [Bindable]
           public var imgCls:Class;// 嵌入图片资源
           
           private var bt:Bitmap=new imgCls() as Bitmap;

使用Embed外部嵌入一张名为skin.jpg的图片转换一个Class类。这样我们可以转换我们希望的位图类。

接下来,使用sandy类为我们提供的位图贴图材质,把我的之前转换的位图bt.bitmapData,作为参传递过去。

var material2:Material=new  BitmapMaterial(bt.bitmapData);//创建图片贴图

app2=new Appearance(material2); //指定表面材质

四。如何进行换皮肤?

在程序里面放入一个combox

使用combox 选择我们的皮肤

<mx:ComboBox  id="mycombox"   change="seletSkin(event)" focusEnabled="false" dataProvider="{myxml..myskin}" x="594" y="66"></mx:ComboBox>

利用combox选择来切换皮肤。

效果图:

flex sandy

下面是一个利用flash来创建一个图形

转载于:https://www.cnblogs.com/hero82748274/archive/2009/02/12/1388784.html

Flex 结合sandy引擎创造相关推荐

  1. flex 结合sandy引擎创作

    <?xml version="1.0" encoding="utf-8"?> <mx:Application xmlns:mx="h ...

  2. sandy引擎学习笔记: 创建一个立方体

    问题:如何利用sandy的类库去创建一个立方体呢? 首先,我们要先了解sandy类库的结构 可以看到上面就官方网放出的类库表,有一些很容易理解,像sandy.events 这个和flash.event ...

  3. Sandy引擎学习笔记:摄影机

    第三课程:如何使用摄影机?通过摄影机移动来使摄影的对象产生变化,这样会使动画变得容易.因为你不需要改变观察对象的的属性,只是改变摄影机的变化 package { import flash.displa ...

  4. 基于组块设计执行开放世界等距游戏引擎

    文 / Benedikt S. Vogler 过去今年里我一直在开发一款名为Wurfel Engine的游戏引擎.以下大部分内容是对于我在学校中的最后一次考试所发现的一些算式与解决方法的解释并在过去2 ...

  5. HTML5游戏引擎Playcraft将于近日正式启动

    HTML5游戏引擎Playcraft将于近日正式启动,该引擎5月时就已经发布了测试版,经过2个月的测试后,将于近日正式上线.创始人兼首席执行官马丁·韦尔斯介绍说,playcraft是一个为游戏设计者提 ...

  6. 如何制作自己的C++游戏引擎

    你想了解更多关于游戏引擎的知识.并自己来写一个吗? 这可是非常牛皮的一件事.为了帮助你学习,这里有一些C++库和依赖项的推荐,可以帮助你快速上手. 游戏开发一直是我的学生学习更高级计算机科学主题的好帮 ...

  7. Cocos游戏引擎,让小保安成就大梦想

    秦丕胜是大连的一位保安.与非常多自学成才的人一样,2010年,在考上日照职业技术学院一年后便退了学. 因为没有高学历.加上喜欢自由,他来到了大连成为了一名保安.从高中開始,秦丕胜就酷爱代码,他曾自豪地 ...

  8. 从DOOM到CE3 20年3D游戏引擎发展史漫谈

    代表游戏:毁灭公爵3D(Duke Nukem 3D).猎鹿人(Redneck Deer Hunting).血祭 (Blood)代表游戏:上古卷轴:战斗尖顶(The Elder Scrolls:Batt ...

  9. 游戏不单只靠烧硬件 主流游戏引擎大盘点

    搭建游戏的核心所在 何谓游戏引擎 回顶部 前言:游戏引擎是一个游戏的重要核心,它既是建立游戏的基础,也是控制游戏每一个细节的指挥官,不论是游戏场景中的一个不起眼亮点,还是气势宏伟的场景视觉特效.不同的 ...

最新文章

  1. Python中内建模块collections常见用法总结
  2. java进阶 线程池 join用法总结:thread4.join();方法,就表明thread4.join();这个线程受到贵客待遇,直到这个线程执行完,被插入这个方法的载体线程才可以执行。
  3. Emacs支持gomodifytags
  4. mysql 完整的增删改查 和单表查询
  5. safe_mode 开启后linux下影响
  6. Android 7.0 源码分析项目一期竣工啦
  7. 75的写的自己情感经历(转贴自天涯社区)
  8. hamcrest_重新设计Hamcrest
  9. Oracle数据库卸载
  10. mongodb数据库的安装 for windows版本 0916
  11. 脆弱的是生命 不脆弱的是精神 雅安 挺住!
  12. [MySQL Reference Manual] 24 MySQL sys框架
  13. 内网穿透工具_utools让你3步搭建一个内网穿透工具
  14. IP65防水步进电机可以在什么环境使用?
  15. 中望CAD的引线标注格式怎么改_大神总结的CAD设计五个段位 快来看看你在哪个阶段...
  16. html语言format,HTML 文本格式化
  17. 网络安全web渗透技术
  18. 数字孪生|数字孪生装备-概念与内涵
  19. idea 重启之后 IntelliJ IDEA 一直在indexing
  20. 手把手教你搭建国产嵌入式模拟器SkyEye开发环境

热门文章

  1. Android开发笔记(一百七十六)借助FileProvider发送彩信
  2. IOCP模型TCP服务器
  3. Spark学习之spark集群搭建
  4. 勒索软件再次降临 教育网为什么成为重灾区
  5. destoon复制新模块的方法
  6. PostgreSql 分页limit
  7. RDS还原数据库时报错:ERROR 1227 (42000) at line 78664
  8. 【算法学习笔记】73.数学规律题 SJTU OJ 1058 小M的机器人
  9. LVS学习笔记--DR模式部署
  10. Flashlight should be gray after finishing Recor...