【GIF图片在SL里的应用】(10秒影像效果)
secondlife吧
全部回复
仅看楼主
level 10
卸妆了 楼主
先发个表情防吞。 [戳]
2013年07月09日 07点07分 1
level 10
卸妆了 楼主
说在前面的话:
“世间万物都是静止的。”
因为有了“时间(轴)”,所以才呈现出各方的美丽。
2013年07月09日 07点07分 2
level 10
卸妆了 楼主
步骤一:
随意找个GIF动画(10秒)
然后用此工具将GIF动画图裁成多FRAME的图片集
(需要此工具的同学加QQ群:122121756 <群共享里有>)
步骤二:
被裁剪好的图片将会自动生产在桌面,形式如下:
注:不要重命名
步骤三:
上传此文件(被裁好的那个文件)至游戏里,10L(临时上传是无效的)
2013年07月09日 07点07分 3
临时上传的还是可以滴
2013年07月09日 12点07分
没有看完就回复了 丢入物品里的话的确临时无效 附加表面实现OK
2013年07月09日 12点07分
回复 雪飘519 :是的~
2013年07月09日 14点07分
步骤二: 被裁剪好的图片将会自动生产在桌面 这个....应该是在软件的所在的文件夹里生成吧....你是直接吧软件丢桌面....所以生成在桌面了
2013年07月09日 15点07分
level 13
这个还真没做过,只玩过等分图片循环放映,用的是llSetTextureAnim();方法。
2013年07月09日 08点07分 5
同理
2013年07月09日 08点07分
level 10
卸妆了 楼主
【TIP】改变播放速率:
如图所示。
纹理的名称不能随意修改。
如果前缀太长而导致错误,可以适当地简短一些。(前缀:QSSYMM)
这是被裁剪好的图。
由图可见。
X轴6图,Y轴8图。
正好解释了如下图中的:6;8;10
(10为每秒运行的图片数量,数值越大,GIF效果越快)
2013年07月09日 08点07分 6
level 10
卸妆了 楼主
好了。
下面来剖析一下GIF的内核:
integer animOn = TRUE; list effects = [LOOP];
//LOOP 循环播放,此处为电影效果
//ROTATE 翻转效果
//SCALE 模型放大、缩小效果integer movement = 0;
integer face = ALL_SIDES; //将"ALL_SIDES"更换成任何数值(以立方体为例:1-6),可以有效控制任一面的效果
integer sideX = 1;
integer sideY = 1;
float start = 0.0; //开始于某个位图(设置动画起点)
float length = 0.0; //动画长度(长度决定了结束于某个位图)
float speed = 10.0;
initAnim()
{
if(animOn)
{
integer effectBits;
integer i;
for(i = 0; i < llGetListLength(effects); i++)
{
effectBits = (effectBits | llList2Integer(effects,i));
}
integer params = (effectBits|movement);
llSetTextureAnim(ANIM_ON|params,face,sideX,sideY, start,length,speed);
}
else
{
llSetTextureAnim(0,face,sideX,sideY, start,length,speed);
}
}fetch()
{
string texture = llGetInventoryName(INVENTORY_TEXTURE,0);
llSetTexture(texture,ALL_SIDES);
list data = llParseString2List(texture,[";"],[]);
llOwnerSay( llDumpList2String(data ,","));
string X = llList2String(data,1);
string Y = llList2String(data,2);
string Z = llList2String(data,3);
sideX = (integer) X;
sideY = (integer) Y;
speed = (float) Z;
if (speed)
initAnim();
}default
{
state_entry()
{
fetch();
}
changed(integer what)
{
if (what & CHANGED_INVENTORY)
{
fetch();
}
}
}
2013年07月09日 08点07分 7
立方体的面好像是从0开始的,0到5 还是1到6?
2013年07月10日 13点07分
回复 len0112 :我的那个是:0是顶面,5是底面,6及以上都是相当于ALL_SIDES
2013年07月10日 21点07分
level 13
这个简单一点,用通道99,自己定义分割的数量。嘻嘻
integer side = ALL_SIDES;
integer speed = 8;
integer xy=1;
default {
state_entry()
{
llListen(99,"","","");
}
listen( integer channel, string name, key id, string message )
{
xy=(integer)message;
llSetTextureAnim(ANIM_ON | LOOP, side,xy,xy,0,0,speed);
}
}
2013年07月09日 08点07分 9
那个“夜上海”三个字就是用你给我的这个写的。
2013年07月09日 08点07分
回复 卸妆了 :如果就一张图,不需要规定图的名字,直接贴上去就可以了,然后直接操作。。。
2013年07月09日 08点07分
回复 len0112 :是的. 我有好多东西都是你教我的。
2013年07月09日 08点07分
回复 卸妆了 :你自己很厉害啊。我没教你什么啊,你本里就会。。。比我厉害啊。我是菜鸟。。。
2013年07月09日 14点07分
level 14
这2个汗
2013年07月09日 12点07分 10
[爱心]汗什么啊。。。。嘻嘻。想你。。。。[爱心]
2013年07月09日 12点07分
回复 len0112 :干嘛偷我对瑜发的表情啊... [哭泣]
2013年07月09日 13点07分
回复 卸妆了 :看在你是小孩子的份上。。。。不和你计较了。。。。[]
2013年07月09日 14点07分
回复 len0112 :...
2013年07月09日 14点07分
level 13
发一个修改的。
同样使用通道99控制,通道可以修改
命令是/99 4-4-10-all
99是通道,第一个是X轴,第二个是Y轴,第三个是速度,第四个是立方体的面,all是全面,单独控制使用数字。
integer side = ALL_SIDES;
integer speed = 8;
integer x=1;
integer y=1;
default
{
state_entry()
{
llListen(99,"","","");
}
listen( integer channel, string name, key id, string message )
{
list data = llParseString2List(message,["-"],[]);
x=(integer)llList2String(data,0);
y=(integer)llList2String(data,1);
speed=(integer)llList2String(data,2);
if(llList2String(data,3)=="all")
{
side= ALL_SIDES;
}
else
{
side=(integer)llList2String(data,3);
}
llSetTextureAnim(ANIM_ON | LOOP, side,x,y,0,0,speed);
}
}
2013年07月10日 14点07分 11
[呵呵][呵呵][爱心][哈哈]
2013年07月10日 15点07分
回复 雪飘519 :女神。[爱心]
2013年07月10日 20点07分
回复 雪飘519 :今天生病了,现在在医院,今天可能不来了,头还在疼。想你。
2013年07月11日 03点07分
回复 len0112 :-抱抱-
2013年07月11日 10点07分
level 14
最简化版本 8=横面数 6=竖面数 10=1秒的帧数
default{ state_entry() { llSetTextureAnim(ANIM_ON | LOOP, ALL_SIDES,8,6,0,0,10); }}
2013年07月20日 13点07分 13
这个简洁 不易懂 :)
2013年07月20日 14点07分
汗。。。这个本来就是这么一句的,所做的其它设定,都是为了能够使用命令来完成变量的多样化的。 程序的中心思想是不管代码多复杂,呈现给客户使用的是最简单易懂的操作。
2013年07月20日 14点07分
[呵呵]
2013年07月20日 15点07分
回复 雪飘519 :[爱心]
2013年07月20日 15点07分
1