╋艺 镇╋╋网站网络|程序语言|Flash╋┣◇FLASH交流 → 按钮中调用外部文本问题


  共有15226人关注过本帖树形打印复制链接

主题:按钮中调用外部文本问题

帅哥哟,离线,有人找我吗?
wshejun
  1楼 | QQ | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:注册用户 帖子:1 积分:88 威望:0 精华:0 注册:2010/7/6 23:47:27
按钮中调用外部文本问题  发帖心情 Post By:2010/8/9 14:44:04 [只看该作者]

小弟最近做flash遇到一情况,希望各位大大能够帮忙。
进入主题:做了几个按钮想要从外部调用文本在按钮上显示,但是总无法实现。
希望有能力的大大可以指教一二,小弟拜谢了!

注明:已解决,有需要的朋友可以下载看看,学习学习
www.k13.cn/kcg/1.rar
[此贴子已经被作者于2010-8-9 15:59:13编辑过]

平面设计、网站建设、三维动画、视频制作 联系QQ:114103945  回到顶部
美女呀,在线,快来找我吧!
admin
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信 司令 亲民勋章
等级:管理员 帖子:3026 积分:27499 威望:0 精华:7 注册:2003/12/30 16:34:32
  发帖心情 Post By:2010/8/9 15:40:17 [只看该作者]

loadVariablesNum 函数

loadVariablesNum(url:String, level:Number, [method:String]) : Void

从外部文件(例如文本文件,或由 ColdFusion、CGI 脚本、ASP、PHP 或 Perl 脚本生成的文本)中读取数据,并设置 Flash Player 的某个级别中的变量的值。此函数还可用于使用新值更新活动 SWF 文件中的变量。

指定的 URL 处的文本必须为标准的 MIME 格式 application/x-www-form-urlencoded(CGI 脚本所使用的一种标准格式)。可以指定任意数量的变量。例如,下面的语句定义了多个变量:

company=Adobe&address=601+Townsend&city=San+Francisco&zip=94103

在比 Flash Player 7 更早版本的播放器中运行的 SWF 文件中,url 必须位于与发出此调用的 SWF 文件相同的超级域中。 超级域可以通过删除某一文件的 URL 最左侧的组件而得到。例如,位于 www.someDomain.com 的 SWF 文件可以从位于 store.someDomain.com 的源中加载数据,这是因为这两个文件都在同一个名为 someDomain.com 的超级域中。

如果任何版本的 SWF 文件在 Flash Player 7 或更高版本中运行,则 url 必须与发出此调用的 SWF 文件位于完全相同的域中(请参阅《学习 Flash 中的 ActionScript 2.0》中的“F“lash Player 安全功能”)。例如,位于 www.someDomain.com 的 SWF 文件只能从也位于 www.someDomain.com 的源中加载数据。如果要从其它域中加载数据,则可以在承载该 SWF 文件的服务器上放置一个跨域策略文件。有关详细信息,请参阅“关于允许跨域数据加载”。

如果要将变量加载到目标影片剪辑中,请使用 loadVariables() 而不是 loadVariablesNum()

可用性:ActionScript 1.0、Flash Player 4 ― Flash 7 中的行为已更改。将 Flash 5 或更高版本中打开的 Flash 4 文件转换为使用正确的语法。

参数

url: String ― 变量所处位置的绝对或相对 URL。如果发出此调用的 SWF 文件正在 Web 浏览器上运行,则 url 必须与 SWF 文件位于同一个域中;有关详细信息,请参阅“说明”部分。

level:Number ― 一个整数,指定 Flash Player 中接收这些变量的级别。

method:String [可选] ― 指定用于发送变量的 HTTP 方法。 该参数必须是字符串 GETPOST。如果没有要发送的变量,则省略此参数。GET 方法将变量附加到 URL 的末尾,它用于发送少量的变量。POST 方法在单独的 HTTP 标头中发送变量,它用于发送长字符串的变量。

示例

下面的示例将名为 params.txt 的文本文件中的信息加载到 Flash Player 中级别 2 处的 SWF 的主时间轴中。文本字段的变量名必须与 params.txt 文件中的变量名匹配。setInterval() 函数用于检查向 SWF 中加载数据的进度。该脚本检查 params.txt 文件中是否存在名为 done 的变量。

loadVariablesNum("params.txt", 2);
function checkParamsLoaded() {
 if (_level2.done == undefined) {
 trace("not yet.");
 } else {
 trace("finished loading. killing interval.");
 trace("-------------");
 for (i in _level2) {
 trace(i+": "+_level2[i]);
 }
 trace("-------------");
 clearInterval(param_interval);
 }
}
var param_interval:Number = setInterval(checkParamsLoaded, 100);

// Params.txt includes the following text
var1="hello"&var2="goodbye"&d
[此贴子已经被作者于2010-8-9 16:00:31编辑过]


  
平面设计、网站建设、三维动画、视频制作 联系QQ:114103945  回到顶部
美女呀,在线,快来找我吧!
admin
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信 司令 亲民勋章
等级:管理员 帖子:3026 积分:27499 威望:0 精华:7 注册:2003/12/30 16:34:32
  发帖心情 Post By:2010/8/9 15:42:48 [只看该作者]

其他问题参考
loadVariablesNum 引入的变量问题
data.txt文本文件内容:numb1=6&numb2=3

用loadVariablesNum ("data.txt" ,0);读取数据后,将numb1和numb2的值进行计算,应该如何写AS?
numb1\numb2分别是两个文本的变量。请指教!
-------------------------------------------------------
不知道是不是楼主在计算的时候,数据取不到问题.如果是应该是这个原因.

你用loadVariablesNum加载数据,但是你没有判断到你用到它里面数据时时候已经加载完毕,故而报错.

你可一用gotoAndPlay(*)进行控制,如果加载完毕,在进行计算.

或,给他们加到MC里,用my_mc.onData = function(){ //再计算 }

猜测的,不知道你是不是这个意思



谢谢楼上的!不过,我的问题不是你说的这种。
我是想做个计算,例如,加法运算:aa=numb1+numb2=?
但是numb1和numb2的数据要从外部的一个文本文件中获得。
可是测试时,在用loadVariablesNum加载数据后,提示numb1和numb2为没定义或NaN.
不知应该如何写AS?


/*在舞台上分别创建三个输入文本和动态文本,还有一个要计算的总和动态文本,分别给予命名
qty1_txt qty2_txt qty3_txt , price1_txt price2_txt price3_txt , priceTotal_txt
*/
var priceCD:Number = 320; //定义CD的单价,变量
var priceMP3:Number= 150; //定义MP3的单价,变量
var priceDVD:Number= 125; //定义DVD的单价,变量
//设置定义你要买的各商品的个数
qty1_txt.text = 0;
qty2_txt.text = 0;
qty3_txt.text = 0;
//计算你定义好的要买的各商品的个数*单价
this.onEnterFrame = function() {
price1_txt.text = Number(qty1_txt.text)*Number(priceCD);
price2_txt.text = Number(qty2_txt.text)*Number(priceMP3);
price3_txt.text = Number(qty3_txt.text)*Number(priceDVD);
};



最后用一个button来累加他们的和

on (release) {
_root.priceTotal_txt.text = Number(price1_txt.text)+Number(price2_txt.text)+Number(price3_txt.text);
}

__________路过___________交个朋友啊_________老兄,你也不错啊,AS________



你要的应该和这方法是一样的,老兄你再看看咯

__________刚才不小心关了,_____________又写了第二遍____________头都大了________



"可是测试时,在用loadVariablesNum加载数据后,提示numb1和numb2为没定义或NaN."

你的那个报错信息已经很明显了,就是我说的那个原因.不过还要补充一下:

undefined:时,是你的数据根本就没有加载近来就运算了,当然结果是undefined了.

NaN:时,数据应该是已经加载了,但因为你的数据没有转换成Number类型的缘故.


看来你的问题还没有解决,那我们在讨论一下:

1.还象我上面说的那样,在你进行计算前一定要判断数据是否已经加载完毕,如果没有,在怎么算都会报错的。

2.如果数据加载OK了,我们在进一步的看,因为loadVariablesNum方法它有个"级别"问题,如果要正确应用,要这样写:
loadVariablesNum("data.txt", 1);
aa = Number(_level1.numb1)+Number(_level1.numb1);
但看了你的例子是加载到0级别的,如果这样不知道为什么还要用loadVariablesNum?我认为用
new LoadVars()比这个方便的多.

3.因为你说:"numb1\numb2分别是两个文本的变量",不知道是不是最后要在动态文本上显示,如果是而且
又用到了"text方法"那你动态文本的名字就"不能"是numb1或numb2如果是,那依然会报错.

以上是分析了三个可能出现的问题,但不知道你的是不是这样子.



正确答案
loadVariablesNum("data.txt", 0);
_root.onEnterFrame = function() {
if (numb2) {
var a = Number(numb1);
var b = Number(numb2);
trace(a+b);
delete onEnterFrame;
}
};
//用帧循环的意思是,确定变量什么时候加载完成,完成后计算,然后再删除帧循环


文本文件内容就是:
numb1=3&numb2=6
又是在本地机上,那么加载还要多久啊?

var a = Number(numb1);
var b = Number(numb2);
好象不能将numb1/numb2转换为数值!

以上的朋友,如有做好的FLASH源文件,发过来好吗?



在本机上,加栽速度,这个比一定,快的,不到一秒,慢了就不好说了。

如果你现在的机子在做很多的事情,这时就很慢.等等情况太多了。

var a:Number = Number(numb1);
var b:Number = Number(numb2);

可以转换,前提,还是要加载成功.



如果numb1和numb2是用loadVariablesNum("data.txt", 0);加载的变量,就算加载成功,

var a:Number = Number(numb1);
var b:Number = Number(numb2);
也不能转换为数值,我试过几次了!

webbread,
如有做好的FLASH源文件,发过来好吗?




问题解决了,原来是我的文本文件的写法有点问题。谢谢各位的指导了!!!



  
平面设计、网站建设、三维动画、视频制作 联系QQ:114103945  回到顶部
美女呀,在线,快来找我吧!
admin
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信 司令 亲民勋章
等级:管理员 帖子:3026 积分:27499 威望:0 精华:7 注册:2003/12/30 16:34:32
  发帖心情 Post By:2010/8/9 15:43:01 [只看该作者]

useCodepage(System.useCodepage 属性)

public static useCodepage : Boolean

一个布尔值,它通知 Flash Player 是使用 Unicode 来解释外部文本文件,还是使用运行播放器的操作系统的传统代码页来解释外部文本文件。System.useCodepage 的默认值为 false。

  • 当该属性设置为 false 时,Flash Player 按 Unicode 解释外部文本文件。(保存这些文件时,必须使用 Unicode 对其进行编码。)
  • 当属性设置为 true 时,Flash Player 使用运行播放器的操作系统的传统代码页来解释外部文本文件。

在您保存文本文件时,作为外部文件加载(使用 loadVariables()getURL() 语句,或使用 LoadVars 类或 XML 类)的文本必须按 Unicode 进行编码,以使 Flash Player 能够按 Unicode 识别它。若要使用 Unicode 对外部文件进行编码,请在支持 Unicode 的应用程序(例如,Windows 2000 上的"记事本")中保存这些文件。

如果加载的外部文本文件没有按 Unicode 进行编码,则应将 System.useCodepage 设置为 true。在加载数据的 SWF 文件的第一帧中,在最前面添加以下代码(第一行代码):

System.useCodepage = true;

如果有这一行代码,Flash Player 将使用运行 Flash Player 的操作系统的传统代码页来解释外部文本。对于英文 Windows 操作系统,该代码页通常为 CP1252;对于日文操作系统,该代码页通常为 Shift-JIS。如果将 System.useCodepage 设置为 true,则 Flash Player 6 和更高版本处理文本的方式与 Flash Player 5 相同。(Flash Player 5 将所有文本都视为按运行播放器的操作系统的传统代码页编码的文本。)

如果将 System.useCodepage 设置为 true,应注意在运行播放器的操作系统的传统代码页中必须包括您的外部文本文件中使用的字符,这样才能显示文本。例如,如果您加载了一个包含中文字符的外部文本文件,则这些字符不能显示在使用 CP1252 代码页的系统上,因为该代码页不包括中文字符。

若要确保所有平台上的用户都能查看您的 SWF 文件中使用的外部文本文件,应将所有外部文本文件按 Unicode 进行编码,并将 System.useCodepage 设置保留为其默认设置 false。这样,Flash Player 6 和更高版本将按 Unicode 解释文本。



  
“艺镇”官方站:www.zyzsky.com QQ群:1221854  回到顶部