Archive

Posts Tagged ‘Falsh’

TOON Test[Flash]

May 26th, 2007

SWF Encrypt v4.0.1 英文破解版 (2007-3-29更新)

April 25th, 2007

SWF Encrypt v4.0.1 英文破解版 (2007-3-29更新)
上传时间:2006-7-20
更新时间:2007-3-29

官方网站:http://www.amayeta.com
点击下载:SWF Encrypt v4.0.1 英文破解版

***************
2007-3-29更新
v4.0.1

经测试发现,加密强度选项(Encryption)和最优化选项(optimization)不再像 v3.0.12 一样看起来不怎么起作用,设置过后的加密文件体积明显下降。

感谢 深蓝兄 的破解。

***************
2007-1-13更新

3.0.12注册
name:任意,例如 www.zhugao.cn
email:任意,例如 zhugao@zhugao.cn
sn:SE3-9gGHtBdn74wSn3945-861

尽管加密后文件仍然有明显的增大,然而令人振奋的是,已经支持放射状渐变,支持Flash8.0。

***************
2006-12-28测试发现

3.08不支持放射状渐变,不支持Flash8.0,请发布成6.0或7.0来加密。

***************
2006-7-20更新

SWF Encrypt 3.08 功能介绍:
1、加密和保护SWF影片文件内容。
2、防止大多数流行的SWF反编译软件。
3、防止actionscript 脚本盗用。
4、Actionscript 混淆技术。
5、100% 安全地本地化加密操作。
6、优化对Macromedia Flash 6, 7的支持。
7、无actionscript 代码行数限制。
8、唯一的加密码,更多级别的压缩控制等等。
9、比起其他加密软件,它可以有效防止 Action Script Viewer

缺陷:
加密后文件明显增大,不保证所有文件都能加密成功。

***************
2007-1-25更新
关于Flash加解密的综合文章:
http://www.zhugao.cn/info/news_show.asp?id=503

undecided , , ,

FLASH AS NetStream对象

April 24th, 2007

NetStream对象是在所有联机对象之间传递影音串流。如果你仅仅是为了传递文字聊天内容,使用共享对象就可以解决,不必要使用这个对象。
该对象的基本属性有
time 到目前为止,串流资料播放的秒数
bufferTime 缓冲区的最大秒数
currentFps 当前播放影像的速率(每秒帧数)
bufferLength 当前缓冲区的资料秒数
liveDelay 实时播放视频流的间隔
但是当你想知道当前播放的影像的总长度的时候,必须调用服务器端的方法才可以,因为客户端的FlashPlayer是无法获知数据流的总长的。你需要在客户端写如下方法:

01 : function getInfo()
02 : {
03 : nc.call( ’sendInfo’, new MyResultSetName(), myStream);
04 : }
05 : function MyResultSetName()
06 : {
07 : this.onResult = function ( retVal )
08 : {
09 : _root.streamlength = retVal;
10 : };
11 : this.onStatus = function(info)
12 : {
13 : trace ( ‘Level:’ + info.level + ‘Code:’ + info.code);
14 : // process error object
15 : };
16 : }

然后在服务器端的main.asc文件中的相关事件中写入:

01 : application.onAppStart = function ()
02 : {
03 : trace(’::: Application has started :::’);
04 : }
05 : application.onConnect = function (client)
06 : {
07 : application.acceptConnection (client);
08 : // Add methods
09 : client.prototype.sendInfo = function (name) {
10 : var slen = Stream.length (name);
11 : trace ( ’slen:’ + slen);
12 : return slen;
13 : };
14 : }

相关方法参考:
setBufferTime ( 秒数)
可以设置缓冲区的大小以提高低品质的网络情况
注意:bufferLength大小总是不大于bufferTime

attachVideo ( 影像来源,[ 拍摄模式 ] )
将摄像机对象的影像追加给串流对象,如果影像来源为null,将停止捕捉影像
拍摄模式省略表示捕捉连续的影像;若为0则只拍摄单元格画面;大于0,将以此数值为秒数间隔,连续拍摄单元格影像。

attactAudio ( 声音来源 )
将麦克风的音源设定给串流对象

publish ( 串流资料名,[ 播出方式 ])
如果串流资料名没有指定则停止播出
播出方式有live(默认值)实时播出但不存储;record 播出同时以串流资料名.flv文件存储,路径为应用程序路径下面的streams文件夹;append 播出的同时追加到指定名称的flv文件中,如果不存在,则自动创建。

pause()
暂停、开始播放

close ()
停止发布或播放当前所有数据流,把 NetStream.time 属性设置为 0, 使得其它客户端可以使用该数据流,该方法当你使用 NetStream.play() 或NetStream.publish() 的时候被隐含调用

play( 串流名称,起始时间,长度,是否清除前一个串流 )
起始时间默认值为-2 表示flash会先尝试播放实时影音,否则就播放指定识别名称的文件
若为-1 将只播放实时影音 若为0 将只播放指定名称的录像内容
长度参数指定影音播放的秒数 默认为-1 表示一直播放到结束 为其它值为播放到指定秒数的内容

receiveVideo(fps)
指定播放串流的速率fps设定为0时,flash将停止播放影像

seek(秒数)
快倒倒录像文件倒指定秒数的画面,如果设为0,则跳转到开头
可以使用相对时间来跳转,如
client_ns.seek(client_ns.time-3)

如果要在传输音频或视频流的同时,包含文本数据等,也就是说进行数据交换,则可以使用send方法。
可以在客户端包含下面的actionscript:

1 : var my_nc:NetConnection = new NetConnection();
2 : my_nc.connect(’rtmp://myServer.myDomain.com/appName/appInstance’);
3 : var my_ns:NetStream = new NetStream(my_nc);
4 : my_ns.publish(’slav’, ‘live’);
5 : my_ns.send(’Fun’, ‘this is a test’); , -1, -1);
5 :
6 : my_ns.Fun = function(str) { //Fun is the handler name
7 : trace (str);
8 : }

在接收端可以使用下面代码:

1 : var my_nc:NetConnection = new NetConnection();
2 : my_nc.connect(’rtmp://myServer.myDomain.com/appName’);
3 : my_ns = new NetStream(my_nc);
4 : my_ns.play(’slav’

关闭视频流的几种方法:

1 : myStream_ns.publish(false);// 停止整个串流
2 : myStream_ns.close();//关闭串流,当然也就停止了串流播放
3 : mystream_ns.attachVideo(null);//仅仅停止视频播放,仍然保持音频播放

/////////

监视onStatus(info) ,info.code:
开始播放
NetStream.Play.Start (其实还没播放)
然后缓冲(根据setBufferTime设置的秒数缓。。)
NetStream.Buffer.Full (缓冲装满了,这才开始播放)
然后播放完了
NetStream.Play.Stop (其实还没播放完)
注意了,然后还要播放缓冲 - -b
NetStream.Buffer.Empty (缓冲空了,这才播放完了。。)
群里的kinglong兄比较聪明~,先Stop的时候做个记号,然后再满足Empty才算播放完,也就是两个条件,因为网速慢也会Empty。。。好办法

Docu~ , ,

flash as setInterval 函数

April 19th, 2007

setInterval 函数
setInterval(functionName:Object, interval:Number [, param1:Object, param2, ..., paramN]) :Number setInterval(objectName:Object, methodName:String, interval:Number [, param1:Object, param2, ..., paramN]) :Number

在播放 SWF 文件时,每隔一定时间就调用函数或对象的方法。可以使用间隔函数更新数据库中的变量或更新时间显示。

如果 interval 大于 SWF 文件的帧频,则仅在播放头每次进入某个帧时才调用间隔函数;这就尽可能减小了每次刷新屏幕时所产生的影响。

注意:在 Flash Lite 2.0 中,如果传入此方法的间隔小于 SWF 文件的帧频,则会忽略该间隔,并且仅以 SWF 文件的帧频间隔调用间隔函数。如果该间隔大于 SWF 文件的帧频,则会在经过该间隔后的下一帧上调用该事件。

可用性:ActionScript 1.0;Flash Lite 2.0

参数
functionName:Object — 一个函数名称或对匿名函数的引用。

interval:Number — 对 functionName 或 methodName 参数的调用所间隔的时间(以毫秒为单位)。

param:Object [可选] — 传递给 functionName 或 methodName 参数的参数。多个参数应该用逗号隔开:param1,param2, …,paramN

objectName:Object — 一个包含 methodName 方法的对象。

methodName:String — objectName 的一个方法。

返回
Number — 一个可传递给 clearInterval() 以取消间隔的标识整数。

示例
用法 1:下面的示例每隔 1000 毫秒(1 秒)调用一个匿名函数。

setInterval( function(){ trace(”interval called”); }, 1000 );

用法 2:下面的示例定义两个事件处理函数并调用它们中的每一个。对 setInterval() 的第一个调用调用 callback1() 函数,该函数包含一个 trace() 语句。对 setInterval() 的第二个调用将字符串 “interval called” 作为参数传递给函数 callback2()。

function callback1() {
trace(”interval called”);
}

function callback2(arg) {
trace(arg);
}

setInterval( callback1, 1000 );
setInterval( callback2, 1000, “interval called” );
用法 3:此示例使用对象的方法。在想要调用为对象定义的方法时,您必须使用该语法。

obj = new Object();
obj.interval = function() {
trace(”interval function called”);
}

setInterval( obj, “interval”, 1000 );

obj2 = new Object();
obj2.interval = function(s) {
trace(s);
}
setInterval( obj2, “interval”, 1000, “interval function called” );
必须使用 setInterval() 语法的第二种形式来调用对象的方法,如下面的示例所示:

setInterval( obj2, “interval”, 1000, “interval function called” );
使用此函数时,需要注意在 SWF 文件中使用的内存。例如,当您从 SWF 文件中删除影片剪辑时,不会删除在其中运行的任何 setInterval() 函数。在完成对 setInterval() 函数的使用后,请始终使用 clearInterval() 来删除它,如下面的示例所示:

// 为 MovieClipLoader 实例创建事件侦听器对象
var listenerObjectbject = new Object();
listenerObject.onLoadInit = function(target_mc:MovieClip) {
trace(”start interval”);
/* after the target movie clip loaded, create a callback which executes
about every 1000 ms (1 second) and calls the intervalFunc function. */
target_mc.myInterval = setInterval(intervalFunc, 1000, target_mc);
};
function intervalFunc(target_mc) {
// 显示一条普通消息,其中包含实例名称和任意文本。
trace(target_mc+” has been loaded for “+getTimer()/1000+” seconds.”);
/* when the target movie clip is clicked (and released) you clear the interval
and remove the movie clip. If you don’t clear the interval before deleting
the movie clip, the function still calls itself every second even though the
movie clip instance is no longer present. */
target_mc.onRelease = function() {
trace(”clear interval”);
clearInterval(this.myInterval);
// 删除目标影片剪辑
removeMovieClip(this);
};
}
var jpeg_mcl:MovieClipLoader = new MovieClipLoader();
jpeg_mcl.addListener(listenerObject);
jpeg_mcl.loadClip(”http://www.helpexamples.com/flash/images/image1.jpg”,
this.createEmptyMovieClip(”jpeg_mc”, this.getNextHighestDepth()));
如果在类中使用 setInterval(),您需要确保在调用该函数时使用 this 关键字。如果不使用该关键字,setInterval() 函数就无法访问类成员。下面的示例说明了这一点。对于一个具有名为 deleteUser_btn 的按钮的 FLA 文件,将以下 ActionScript 添加到第 1 帧上:

var me:User = new User(”Gary”);
this.deleteUser_btn.onRelease = function() {
trace(”Goodbye, “+me.username);
clearInterval(me.intervalID);
delete me;
};
然后在 FLA 文件所在的同一目录中创建一个名为 User.as 的文件。输入以下 ActionScript:

class User {
var intervalID:Number;
var username:String;
function User(param_username:String) {
trace(”Welcome, “+param_username);
this.username = param_username;
this.intervalID = setInterval(this, “traceUsername”, 1000, this.username);
}
function traceUsername(str:String) {
trace(this.username+” is “+getTimer()/1000+” seconds old, happy birthday.”);
}
}

clearInterval 函数

Docu~ , ,

FLASH 鼠标跟随+缓冲

April 18th, 2007

3个元件 分别名叫 follow1 , follow2 , follow3

分别跟随

_x 轴
_y轴
双轴

[code]mouse_y=_ymouse;
mouse_x=_xmouse;
setProperty(_root.follow1, _y, mouse_y + ((getProperty(_root.follow1,_y)-mouse_y)/1.15));
setProperty(_root.follow2, _x, mouse_x + ((getProperty(_root.follow2,_x)-mouse_x)/1.15));
setProperty(_root.follow3, _x, mouse_x + ((getProperty(_root.follow3,_x)-mouse_x)/1.15));
setProperty(_root.follow3, _y, mouse_y + ((getProperty(_root.follow3,_y)-mouse_y)/1.15));[/code]

Docu~ , ,

利用侦听事件SWFLoader在ie下失效以及解决

March 29th, 2007

本来flash9文件的loading可以按照下面的代码写,但是发现在ie下侦听的事件没有起作用,而在ff和opera下都没有问题…

package
{

import flash.display.*;
import flash.events.*;
import flash.text.*;
import flash.net.*;

public class SWFLoader
{
private var rootMc;
private var _loader;
private var _label;
private var _callback;
public function SWFLoader(mc,fun=null)
{
rootMc = mc;
createChildren();
_callback = fun;
rootMc.root.loaderInfo.addEventListener(ProgressEvent.PROGRESS, progressHandler);
rootMc.root.loaderInfo.addEventListener(Event.COMPLETE, completeHandler);

}

private function createChildren()
{
rootMc.stage.scaleMode = “noScale”;
rootMc.stage.align = “TL”;
_loader = new Sprite();
_loader.x = (rootMc.stage.stageWidth - 200)/2;
_loader.y = (rootMc.stage.stageHeight - 20)/2;
rootMc.addChild(_loader);
//
_label = new TextField();
_label.width = 200;
_label.height = 20;
_label.text = “wait….”;
_loader.addChild(_label);
}

private function progressHandler(e)
{
trace(”loading”)
_label.text = “loading:\t”+e.bytesLoaded+”/”+e.bytesTotal+”\tprc:”+Math.round((e.bytesLoaded/e.bytesTotal)*100)+”%”;
}

private function completeHandler(e)
{
trace(”loaded”);
//_label.text = “loaded”;
_loader.parent.removeChild(_loader);

if(_callback is Function)
_callback();
}

}
}

不知道为何侦听事件没有成功…
只有先改回as1时代的笨方法…

package
{

import flash.display.*;
import flash.events.*;
import flash.text.*;
import flash.net.*;

public class SWFLoader
{
private var rootMc;
private var _loader;
private var _label;
private var _callback;
public function SWFLoader(mc,fun=null)
{
rootMc = mc;
createChildren();
_callback = fun;

var mc = new Shape();
mc.addEventListener(”enterFrame”,efHandler);
function efHandler(e)
{
var bl = rootMc.root.loaderInfo.bytesLoaded;
var bt = rootMc.root.loaderInfo.bytesTotal;
_label.text = “loading:\t”+bl+”/”+bt+”\tprc:”+Math.round((bl/bt)*100)+”%”;
if(bl >= bt)
{
_loader.parent.removeChild(_loader);

if(_callback is Function)
_callback();

mc.removeEventListener(”enterFrame”,efHandler);
mc = null;
trace(mc);
}
}

}

private function createChildren()
{
rootMc.stage.scaleMode = “noScale”;
rootMc.stage.align = “TL”;
_loader = new Sprite();
_loader.x = (rootMc.stage.stageWidth - 200)/2;
_loader.y = (rootMc.stage.stageHeight - 20)/2;
rootMc.addChild(_loader);
//
_label = new TextField();
_label.width = 200;
_label.height = 20;
_label.text = “wait….”;
_loader.addChild(_label);
}
}
}

这样就没有问题了… 只是太…

使用方法:
new SWFLoader(this,function(){SkinManager.load(”FlexSkin.swf”,init);});
//———————————————————————-
function init()
{
//do something
}

Docu~ , ,