ScaleForm十六戒言

不知不觉,在不停地叫骂、哀嚎、惊叹、欢喜中,开发工作已经走过了一个节点了,UE3作为一个顶级,维护多年的引擎,层层深入后,发现每一块都有值得深入,值得改进的地方,平时负责一些场景,机关,交互的活,杂务很,UI也缺人,作为一个火头兵,so,这也是当仁不让的,所以无意间对Scaleform也接触了些许,昨日也正好和群友聊到,一开始没想到其中亦有很多好玩的地方,也是,无论什么,深入下去,都是大有门道的~

 

 

平时忙得团团转,现在,是时候静下来好好消化一下的时候了,那就先从这个UI开始说起。

 

首先,SF库的优势体现在Flash工具上,动画的精确可控性,脱离以往很多时候由程序员填个XML的山寨限制,美工可以自由地利用时间轴、帧与层展开效果,这个是很赞的,当然,漂亮是有代价的,实际应用中也遇到了诸多问题,毕竟,之前用过的人少之又少,大家都是摸着石头过河,

 

 

所以这里就总结几点,大言不惭,但还不敢用箴字,姑且称为ScaleForm十六戒言,寄望能飨以后人,有同行的,更欢迎交流;

 

 

 

1.

加入控件,谨记统一在第一帧预留关键帧,确保头尾一致,否则很可能会在动画播放之后,找不到对应的控件;

 

 

 

2.

Label,Action层,统一放置,规定好分工,标签,AS代码统一管理;

 

 

 

3.

如需要动画处理后再进行逻辑调用,可预留下对应函数名,在尾帧再进行调用;

 

 

4.

自行扩展库,如GFx上在建立自己的UI库,大力提倡使用相对目录包含,且注意,Flash文档设置中的目录优先级高于软件选项中的AS库设置;

 

 

 

5.

千万不要轻易改变控件名,否则,嘿嘿,等着一切从头再来吧;

 

 

 

6.

在Unreal中,SF控件,GfxObject都是临时变量,它们是动态创建的,谨记;

 

 

 

7.

零碎的图素,SF支持如CEGUI的图素打包处理,在位图加上pack 属性,一些特殊用例,则加上no-pack;

 

 

 

8.

no-pack属性可用在一些大图,或者需要程序动态改变的,如RenderTarget(普通动态改变可以使用MovieClip打成一个mc,然后里面用Label标记,不同图素),RT的使用,在UE3中考虑需要多一些,SceneCapture,Alpha通道,Gamma变换,PostProcess,,具体偏题了,不再展开,只做一点建议,尽量规避半透明RT;

 

 

 

8.

组件化非常总要,合理地抽出通用组件,会让工作效率、程序效率事半功倍;

 

 

 

9.

关于字体,官方就有文档,谨记把它也看成是一个控件,统一管理,不要自行单独使用一处字体;

 

 

 

10.

美术人员直接出的文件总是难以尽善尽美的,关于调试,尤其是UE3下,UScript脚本不能断点,SF没有源码,以下两点或许会成为救命稻草,

A,别忘记原始的Flash调试,有更清晰的调试信息。B,千万要注意输出面板和编译错误面板;

 

 

 

11.

UE3下,Click Extension和GfxPlayer 一定要注意跟进,开发成员间保持同步,有时候莫名其妙的问题也许就出在这里;

 

 

 

12.

Flash CS6在稳定,速度上绝对是个更好的选择,很多时候软件如同DC,选新不选旧;

 

 

 

13.

游戏的缩放确实是个头疼问题,上一个项目为把折腾进入Facebook那小小的640窗口,没少受苦,还好Flash的Stage本身支持 exactFit noScale等属性,建议还是noScale,用动态对齐的方法来做,一些特殊需要拉伸的,再自行处理~

 

 

 

14.

关于Package储存,UE3的文件系统自有他一套王国,Flash导入后,texture的储存要注意存放的格式,还有,不同游戏阶段如登陆,游戏中、RT等,建议分包存储(Flash就得使用不同目录,否则,已经开工后,蜘蛛网一样已经缠在一块了,那就算了),方便调试,也可减轻项目管理工具的流量压力(Package忒大...);

 

 

15.

关于视频,众所周知,Flash的FLv出现,对在线视频的意义是革命性的,早年上网,QuickTime,WMV都不给力,为一个RealPlayer上在线影院,是电信拉高价格的得意价码,再后来...好吧,可现在尊敬的SF大大竟然告诉我们想要播放视频,请另付XXdollar,好吧,个人的思路还是走RT,一直瞎忙,现在刚开始看这块,计划动态的用libtheora渲染(感谢Google),如果谁有这方面经验,还望不吝赐教。

 

 

 

16.

关于如何制作酷炫的效果,其实Flash万变不离其宗,所有酷炫动画的本质就如同骨骼动画,就是二维平面上的位移,缩放,Alpha插值渐变,再加上遮罩层,AS脚本,不停的Stop,GotoPlay...好吧,这个还是个经验活,多看,多学最重要;

 

....

 

补充,后续:

17.

  开始建立关键帧,放入元件很重要,结束时,确保控件存在于最后一帧同样重要,否则在一个Movie的多个Scene下跳转,在调用SF的主体程序内同样会遇到莫名其妙的指针丢失问题;

18.

  帧上的action进行变量初始化?这一点一定要防范,尤其是独立一个控件,多次创建调用的情况下,主体程序内对指定变量的赋值与action脚本内的赋值很可能会因为时序问题出现不可预知的情况,so,需要动态赋值的变量初始化,要么不动,要么写在对应的AS类初始化函数中;

19,

  关于透明控件,在ScaleForm中它是仍然会接收鼠标等输入响应!

所以,当程序遇到某块特定区域鼠标无法点击的怪异情况,先去检查下,美术是不是为了做一个渐变帧的效果,

只让一个控件alpha变成0,而未设置inVisible了~

 

20,

  AS中并没有C\C++中的指针概念,但是它具有一个一遇到空变量就罢工的傲娇特性,并且不会报错,这点非常值得警惕;

如,美工拖出一个控件,你对齐做了初始化,和addListener,然后,美术赶脚不爽,又来不及改动,把控件这层改成引导层,

然后,你一无所知,AS从此默默地在化为引导层的空控件变量后自行跳出,

好了,Boss过来一看,原先好好的功能突然就谢特了,在错宗复杂的脚本海洋里去跟踪?去看咋一眼就是对的资源?

关键时刻,这些都是非常痛苦的,所以,AS写脚本多写一行 If( != null ){ },养成严格习惯,会有好处的~

 

21,

  由C++向as中变量赋值时,需要变量是Public

22,

  Flash中使用共享字体库链接,如果一个控件会引用到其中使用字体,如果中途更换了所用字体,SF有Bug会不断地递归寻找字库,会出错甚至导致崩溃,

而这种几个库(不同Flash文件间共享)出现的问题,统称为莫名其妙的Cache问题,有时候勾上自动更新也不是很好的选择(同自动申明舞台实例),这时候,清除组件定义常常是最直接有效的(例如:源控件正常,引入后死活有问题,就很可能是Cache造成)

 

转载于:https://www.cnblogs.com/Zephyroal/archive/2012/08/26/2657293.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/576286.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

一个含n个顶点和e条弧的有向图以邻接矩阵表示法为存储结构,则计算该有向图中某个顶点出度的时间复杂度为

一个含n个顶点和e条弧的有向图以邻接矩阵表示法为存储结构,则计算该有向图中某个顶点出度的时间复杂度为( ) A.O(n) B.O(e) C.O(ne) …

PO三种状态

PO三种状态: 瞬态:如果PO实例从未与Session关联过,该PO实例处于瞬态状态。 持久化:如果PO实例与Session关联起来,且该实例对应到数据库记录,则该实例处于持久化状态。 托管:如果PO实例曾经与ses…

C++Primer学习之一引用和指针

一.引用 引用是一种复合类型,引用分为左值引用和右值引用,其中右值引用时C11提出来的, 常说的引用其意为左值引用。注意:引用不是对象,它是一个对象(变量)的别名,不能改…

第四课 脱壳必备知识要点及方法

第四课 脱壳必备知识要点及方法 今天所要讲的是这高级篇中最为关键,最为重要的一课,希望大家能认真学习,反复推敲,举一反三学习脱壳的各种方法,当然有的时候可能需要几种方法一起使用,今后我们也会一点一点…

C++Primer学习之二#define,const,constexpr

一.#define 是预处理操作符(宏定义),编译器将在编译过程中用到该变量的地方替换成对应的值。 二.Const const是声明常量的限定符,它可以约定一个变量为常量。 如: Const int buffsize 1024; 编译器将…

SQL - 18.触发器

触发器是一种特殊类型的存储过程,它不同于前面介绍过的一般的存储过程。一般的存储过程通过存储过程名称被直接调用,而触发器主要是通过事件进行触发而被执行。触发器是一个功能强大的工具,在表中数据发生变化时自动强制执行。触发器可以用于…

C++求三位数的水仙花数

#include<iostream>using namespace std;int main() {/**个数的3次方十位的三次方百位的三次方这个数的本身*/for (int i 100; i < 999; i){int a i / 100; //百位数int b (i / 10)%10; //十位数int c i % 10; //个位数if (i a * a*a b * b*b c * …

行 转 列

第一种&#xff1a; CREATE TABLE #T1(C1 VARCHAR(10),C2 VARCHAR(20),C3 VARCHAR(10)) INSERT INTO #T1(C1,C2,C3) VALUES(1,DCP,5)INSERT INTO #T1(C1,C2,C3) VALUES(2,PCB,8)INSERT INTO #T1(C1,C2,C3) VALUES(6,ECD,9)INSERT INTO #T1(C1,C2,C3) VALUES(6,PCB,2)INSERT…

字符串移位包含

题目&#xff1a;给定两个字符串s1和s2&#xff0c;要求判定s2是否能够被s1做循环移位得到的字符串包含。例如&#xff0c;给定s1AABCD和s2CDAA,返回true;给定s1ABCD和s2ACBD,返回false。 答&#xff1a; #include "stdafx.h" #include <iostream>using namesp…

C++分文件的编写函数

不分文件编写函数&#xff1a; #include<iostream>using namespace std;//函数的声明 void swap(int a, int b); //函数的定义void swap(int a, int b) {int temp a;a b;b temp;cout << "a的值" << a << endl;cout << "b的值…

多线程socket 端口扫描程序,实现了,但是速度不行,求指点。

#pragma comment(lib,"ws2_32.lib")#include <stdio.h>#include <winsock2.h>#define MAXTHREAD 500#define PORTSTART 1#define PORTEND 60000#define TIMEOUT 1#define WAITTIME 10#define IP "61.135.169.105" //百度地址FILE * logHandle…

好的学习网址收藏

ASP.Net: http://www.189works.com/tech/devlodoc/donet/ 统一系统管理平台&#xff1a; http://www.cnblogs.com/umplatform/转载于:https://www.cnblogs.com/Qiaoyq/archive/2012/09/05/2672371.html

C++ 空指针和野指针

//1&#xff0c;指针变量指向内存中编号为0的空间为空指针 //2&#xff0c;空指针指向的内存空间是不可以访问的 #include<iostream> using namespace std; int main() {int a 10;int * p &a;cout << p << endl;cout << &a << e…

sql 大数据量插入优化

在做一IOS项目时&#xff0c;因为要动态根据文件导入创建数据库,刚开始的时候因为使用动态查询的方式&#xff0c;就是每次插入数据之前查询当前数据是否已经存在,这样的效率极低.6w条纪录3个关联表,使用了30-50分钟的样子. 后来使用动态保存索引号的方式&#xff0c;耗时只是3…

const修饰是指针和常量

1. const修饰指针——常量指针 int a10: int b10: int *p&a;const int* p&a; 常量指针 特点:指针的指向可以修改&#xff0c;但是指针指向的值不可以改&#xff08;p可以改&#xff0c;*p不可以改&#xff09;*p 20;错误&#xff0c;指针指向的值不可以改 p &b; 正…

GL 与 CV 管线 (pipeline) 比较与相互转换

这里把二者作一个比较&#xff0c;并对相关的矩阵做一个联系以使能够相互转换。 1. CV中图像形成过程 (transformation stages) 这一过程可概括为四个坐标系的转换&#xff0c;分别为&#xff1a;世界坐标系、相机坐标系、图像坐标系、像素坐标系&#xff0c;如下图&#xff1a…

C++结构体作为函数参数传参

#include<iostream> using namespace std;#include<string>//结构体 struct Student {string name;int age;int score;}st3;/**结构体作为函数参数传参*/ //值传递 void printStufdent1(struct Student st3) {cout << "子函数" << endl;st3.…

三层架构笔记

1.窗口属性 { IsMdiContainer:True 指定该窗体是否是MDI容器 windowState:Maximized窗口最大化 (4)设置StartPotion:CenterParent 窗口位置居中 (5)Icon:自定义图标 (6)MaximizeBox:False 无最大化选项 (7)FormBorderStyle:FixedSingle 不可改变窗口大小 (8)AcceptButton:bt…

C++结构体中const使用场景

看如下代码&#xff1a; #include<iostream> using namespace std;#include<string>//结构体 struct Student {string name;int age;int score;}st3;//值传递 void printStufdents(struct Student st2) {cout << "子函数" << endl;st2.age…

基于外键关联的一对多单向关联

基于外键关联的单向一对多关联是一种很少见的情况&#xff0c;并不推荐使用。 <class name"Person"><id name"id" column"personId"><generator class"native"/></id><set name"addresses">…