找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 2697|回复: 0

[教程]FlexAnim 说明

[复制链接]

44

主题

6

回帖

778

积分

版主

S.D.C.

积分
778
QQ
发表于 2006-4-8 18:11:35 | 显示全部楼层 |阅读模式
Synth'N Flexable Anim v2.0 介绍
文件格式:nma

FlexAnim 是Synth'N 原创的一种结构比较简单,易于掌握,对模拟器来说也能发挥最大的运算速度的动画形式。虽然没有XML的极大的可扩展性,但是这种结构的运算速度非常快,更适合于模拟器;适合做各种动画形式,高度模拟和原创带有特效的歌曲BGA,common BGA,Note打击的动态火花,Panel SKIN,Shell SKIN的绝大部分动画都是它来完成的。可用记事本等工具直接编辑。
实际上这种BGA形式的Creator已经开始制作了,可以用工具更直观地做出动画。但是这还需要一段时间。因此先简单地介绍一下这种格式结构:



动画的时间是以“毫秒”(ms)记,1秒有1000毫秒。因为FlexAnim不是按帧算的,需要在游戏中和音乐的节拍对应,所以是严格遵守时间的,当然可以当作一秒1000帧,每一帧为瞬时状态。
动画由N个layer组成,每个layer都由anim组成,每个anim又由element组成。
layer,图层
anim,动画
elem,动画中的元素(动画是由一系列静态图组成,这些静态图就是元素element)

data部分:

layers=2 : 总共所用的图层数,在这里定义
bgcolor=#ffffffff : 背景颜色,前两个"FF"表示底色透明度,后面表示RGB值
repeat=1 : 可选,整个动画是否循环
trimmode=1 : 可选,动画裁切方式,1-自动取点,2-默认取点
time = 2000 : 可选,动画时长
mpb=360 : 可选,动画的基本速度,milliseconds per beat方式
bpm=120 : 可选,动画的基本速度,BPM方式
music = test.mp3 : 可选,动画的bgm,做为游戏中的一个参数,动画本身并不播放
screen=800,600 : 可选,动画的resize大小,相对于800x600。若不指定则不resize
内部变量,特殊用途
var1=10 ;
var2=15
...

sprite部分:anim总共要将几张图load至内存。图的标号以load后面的数字为准,minID=1

load2=nback.png ; 普通方式;load可以不按顺序
load1=nback.bmp,#ffffff ; 透明色方式,#ffffff:透明色为白;#000000:透明色为黑
load3=nback.jpg,a ; 伪alpha add混合图
load4=nback.jpg,s ; 伪alpha sub混合图
load5=nback.bmp,&nback_mask.jpg ; mask文件:alpha通道mask图,BMP透明度专用
load6=nback.jpg,a200 ; 特定的alpha add混合图,范围0-255,128或无为缺省,a混合清晰度,通常150较清晰
load7=nback.jpg,s200 ; 特定的alpha sub混合图,范围0-255,128或无为缺省,s混合清晰度
load8=nback.jpg,a200,50 ; 同上,暗色调整(更好地去黑底),0-255,0或无为缺省,一般为0,特殊为50
load9=nback.jpg,s200,50 ; 同上,暗色调整(更好地去黑底),0-255,0或无为缺省,一般为0,特殊为50

sound部分:anim总共要将几个声音文件load至内存。

load1=2.wav
...

rects部分:为动画设定一些初始化的矩形区域,作为特殊用途

rect1=0,0,20,20 ; 左上顶点x1,y1;右下顶点x2,y2
rect2=20,0,40,20

主要部分:
格式:注意layer后面的数字从0开始,而anim后面的数字可以是任何的标签。是为了增加可读性,可以省略。
; 0 - 10




        
        
...



...
图层顺序:layer 0在最顶,最后的在底部

Anim代码介绍:
example:
  
    time=0 ; 这个anim从这个时间起开始播放,在这个时间之前不会出现这个动画
           ; 在每个layer中anim的time是增序,否则初始时间会不准。
;elem部分:
    spr1=3,100   ; 3代表这个elem所使用的图片是第3个,就是load部分“load3=...”这个图片,若为0代表空帧
                 ; 100代表这个elem所持续100毫秒再进入下一个elem
    spr3=5,-1    ; -1代表这个elem的持续时间为无限长,直到这个anim消失为止
   
    visible=1    ; Anim可见
    sound=2      ; Anim开始时播放声音的序号
    trans=1 ; 可选,非线性运动,无这个选项表示匀速,加快运算速度。大于1的数表示加速,数字大小表示加速的幅度(但不影响初始值和末值),大于0小于1表示减速,越接近0表示减速的幅度越大。
    looppos=1    ; 循环播放的anim(elem1->elem2->elem3->elem1->elem2->...),这里设定循环位置。
                 ; 假如anim有4个elem,looppos=2,则顺序是 elem1->elem2->elem3->elem4->elem2->elem3->elem4->elem2->...。(注:如果这是一个不循环动画,即最后一个elem的持续时间是-1(无限长),则设为1)
    duration=500 ; anim持续的时间,500ms
    int=320,240,64,64,1,1,0,255,255,255,255 ; 这个anim的初始状态
    end=,,64,64,5,5,0,0,255,255,255    ; 这个anim的末状态;注意,这就是特效的精华所在^^下一行详细说明
;直接写","表示末状态与初状态一样,减少运算开销
;"状态"由11个数字组成。可以分为。
;第1-2个数字:动画的位置(x,y)注:动画中每个图都将为这个位置。
;3-4:动画的坐标轴,在动画中图片的位置,如果围绕图片的中心旋转,坐标轴设定为x=图片的宽/2,y=图片的高/2
;5-6:动画的缩放(横向和纵向,1为不缩放)
;7:动画的旋转,单位是弧度,6.28为一周。由小到大是逆时针,大到小是顺时针
;8:动画的alpha值,255为不透明,0为透明
;9-11:动画变色效果,RGB值。都为255则不变色,其中一个是255则只显示其中一种颜色。
实现的原理是由初始状态到末状态之间是过度效果。
    rctint=x1,y1,x2,y2;初剪裁区域,相对于源图。剪裁效果与trimmode有关
    rctend=x1,y2,x2,y2;末剪裁区域,相对于源图。剪裁效果与trimmode有关
    sinecolor=1000 ; 可选,决定此anim的颜色是否正弦变化(以该anim颜色部分的初始值开始,末值-初始值为半径变化),一个周期为1000ms(sinecolor的值)
    sinepos=1000 ; 可选,决定此anim的位置是否正弦变化
    sinesize=1000 ; 可选,决定此anim的大小是否正弦变化
    sinerect=1000 ; 可选,决定此anim的剪裁区域是否正弦变化
  
建议:1.anim中的每个elem(图片)的大小最好差不太多,比如人走路的帧图,等。。
      2.layer数尽可能缩减,提高playing的代码效率
http://wonderland.nekketsuclub.org/
回复

使用道具 举报

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

本版积分规则

Archiver|手机版|小黑屋|水幻の音

GMT+8, 2026-11-3 12:58 , Processed in 0.030808 second(s), 24 queries .

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表