查看: 3276|回复: 1
打印 上一主题 下一主题

UniSWF 入门教程(二)分辨率适应与事件监听

[复制链接]

5472

主题

6

听众

1万

积分

版主

Rank: 7Rank: 7Rank: 7

纳金币
76544
精华
23

活跃会员 荣誉管理 突出贡献 优秀版主 论坛元老

跳转到指定楼层
楼主
发表于 2012-12-13 13:47:02 |只看该作者 |倒序浏览
本文分享UniSWF 入门教程第二部分:分辨率适应与事件监听。原文摘录如下:

前言:



对于有Flash基础的人员来说,uniSWF的出现,无疑是改进了流程。能够轻松有效地做出非常棒的GUI。



没有Flash基础,在项目进展初期会带来不少麻烦。

改变是痛苦的,结果是甜美的,基于此,出一些基础教程,方便大家总结经验,科学选择手头工具。



一,补充基本概念

注册点:





(a):在创建元件或转换时,Flash 会提示选择注册位置,如上图是左上角。那么该元素在容器里的对齐位置将从左上角开始,元素旋转时将以左上角为中心。

一般元素布局时,会以左上角为注册点。围绕元素中心旋转时,可选择中心为注册点。





左图扇形元素  注册点在 底部居中

(b):注册点一旦创建完,并非不可修改。进入相应元素编辑舞台后,选择相应元素,进行拖动,即可改变元素注册位置。







     注册点在中心









   注册点到了左上





二,点击下载使用素材, hud.7z (151 K  涉及下载在附件)  hud.7z,本人使用Flash CS6存储的文件





,分别是  



,此部分过程不清楚者,请参考入门教程(一)。

其中要需要注意的是,这里的文本框类型 动态文本框,而非静态文本框和输入文本框,







且嵌入了字体





三,Flash准备OK后,转到unity3d

a,给摄像机,添加 MovieClipOverlayCameraBehaviour,摄像机类型,选择Orthographic

b,创建空物体,命名为UI,

c,给UI物体添加脚本,

复制代码


    using UnityEngine;
    using System.Collections;
    using pumpkin.events;
    using pumpkin.display;
    using pumpkin.text;
    using pumpkin.ui;
     
    public class TestUniSWF01 : MonoBehaviour {
        private MovieClip playerArea;
        
    //设置UI缩放值
        public float scaleRatio=0.5f;
        void Start(){
            Stage stage=MovieClipOverlayCameraBehaviour.instance.stage;
            MovieClip minimap=new MovieClip("uniSWF/learning/swf/hud.swf:Minimap");
            playerArea=minimap.getChildByName<MovieClip>("player");
            
    //缩放UI
    minimap.scaleX=minimap.scaleY=scaleRatio;
            
    //MiniMap注册点在元素中心,故有*/2过程
            minimap.x=stage.stageWidth-minimap.width/2*scaleRatio-20f;
            minimap.y=minimap.height/2*scaleRatio+20f;
            
            stage.addChild(minimap);
        }
    }








继续完善:

Flash扩充:



SimpleButton嵌入字体,注意嵌入相关字符,不要全部嵌入,浪费资源





相应的Unity3d里,hud2.swf的层出选项里,把Export fonts 勾上







点击下载: hud2.fla.7z (616 K   涉及下载在附件) hud2.fla.7z

脚本如下:

复制代码


    using UnityEngine;
    using System.Collections;
    using System.Collections.Generic;
    using pumpkin.display;
    using pumpkin.events;
    using pumpkin.tweener;
    using pumpkin.text;
     
    public class L2 : MonoBehaviour {
        private Stage stage;
        private MovieClip minimap;
        private MovieClip background;
        private MovieClip playerArea;
        private MovieClip btnContainer;
        private Dictionary<string,Handler> menus;
        
        public float scaleRatio=0.5f;
        public float angle=0f;
        
        
        private delegate void Handler();
        
        void Start () {
            if(!MovieClipOverlayCameraBehaviour.instance)return;
            stage=MovieClipOverlayCameraBehaviour.instance.stage;
            
            background=new MovieClip("learnUniSwf/1/hud2.swf:Background");
            //背景全屏制作方法
            background.x=-2;
            background.y=-2;
            background.scaleX=(stage.stageWidth+10)/background.width;
            background.scaleY=(stage.stageHeight+10)/background.height;
            stage.addChild(background);
     
            
            minimap=new MovieClip("learnUniSwf/1/hud2.swf:Minimap");
            playerArea=minimap.getChildByName<MovieClip>("player");
            minimap.scaleX=minimap.scaleY=scaleRatio;
            minimap.x=stage.stageWidth-minimap.width/2*scaleRatio-20f;
            minimap.y=minimap.height/2*scaleRatio+20f;
            stage.addChild(minimap);
            
            BuildButtons();
        }
        
        void Update () {
            angle+=Time.deltaTime*12f;
    //动画,模拟minimap 扫描
            playerArea.rotation=angle;
        }
        
        void MenuData(){
            menus=new Dictionary<string, Handler>();
            menus.Add("New Game",HandlerStart);
            menus.Add("Continue",HandlerContinue);
            menus.Add("Options",HandlerOptions);
            menus.Add("Exit",HandlerExit);
        }
        
        void BuildButtons(){
            MenuData();
            
            btnContainer=new MovieClip("learnUniSwf/1/hud2.swf:SimpleContainer");
            stage.addChild(btnContainer);
            
            int i=0;
            foreach(KeyValuePair<string,Handler> keyvalue in menus){
                MovieClip btn=new MovieClip("learnUniSwf/1/hud2.swf:SimpleButton");
                btn.gotoAndStop(1);
                btn.looping=false
    //按钮子元素对Mouse 不触发事件,很关键,不然下文evt.target将指向Btn内的某元素
                btn.mouseChildrenEnabled=false;
                btn.y=i*(btn.height+10f);
                btn.name=keyvalue.Key;
                btn.getChildByName<TextField>("txt").text=btn.name;
                btnContainer.addChild(btn);
                i++;
            }
        
            
            btnContainer.x=stage.stageWidth/2;
            btnContainer.y=(stage.stageHeight-btnContainer.height)/2;   
    //对按钮父容器进行监听,通过事件的target引用找到按钮
            btnContainer.addEventListener(MouseEvent.CLICK,ClickHandler);
            btnContainer.addEventListener(MouseEvent.MOUSE_ENTER,OnEnter);
            btnContainer.addEventListener(MouseEvent.MOUSE_LEAVE,OnLeave);
        }
        
        void HandlerStart(){
            Debug.Log("handler start....");
        }
        
        void HandlerContinue(){
            Debug.Log("handler continue....");
        }
        
        void HandlerOptions(){
            Debug.Log("handler options....");
        }
        
        void HandlerExit(){
            Debug.Log("handler exit....");   
        }
        
        void ClickHandler(CEvent evt){
            Handler h=menus[(evt.target as MovieClip).name];
            if(h!=null){
                h();
            }
        }
        
        void OnEnter(CEvent evt){
            (evt.target as MovieClip).gotoAndPlay(1);   
        }
        
        void OnLeave(CEvent evt){
            //(evt.target as MovieClip).gotoAndStop(1);
        }
        
    }








最终结果如上图所示。文中涉及的资源,请通过本页附件下载,更多教程分享尽在web3D纳金网纳金网http://www.narkii.com/






hud2.fla.7z

0 Bytes, 下载次数: 49

分享到: QQ好友和群QQ好友和群 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
转播转播0 分享淘帖0 收藏收藏0 支持支持0 反对反对0
回复

使用道具 举报

5472

主题

6

听众

1万

积分

版主

Rank: 7Rank: 7Rank: 7

纳金币
76544
精华
23

活跃会员 荣誉管理 突出贡献 优秀版主 论坛元老

沙发
发表于 2012-12-13 13:47:37 |只看该作者



UniSWF 入门教程(一)工程导入
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

手机版|纳金网 ( 闽ICP备2021016425号-2/3

GMT+8, 2024-9-20 14:22 , Processed in 0.099307 second(s), 35 queries .

Powered by Discuz!-创意设计 X2.5

© 2008-2019 Narkii Inc.

回顶部