〓〓新手常见问题总汇〓〓:flashempire- -

                                      

 

http://file.flashempire.com/showthread.php?t=240613

 

1

读取文件时出现问题,一个或多个文件没有成功导入

flash不支持不标准的mp3格式
Flash 只能导入采样比率为 11 kHz、22 kHz 或 44 kHz,8 位或 16 位的声音

解决方法:用声音编辑软件编辑,重新输出为标准的mp3格式,或者重新去找一个声音文件
声音编辑软件如SoundForge GoldWave CoolEdit

flash支持的声音文件:
WAV(仅限 Windows)
AIFF(仅限 Macintosh)
MP3(Windows 或 Macintosh)
如果系统上安装了 QuickTime 4 或更高版本,则可以导入这些附加的声音文件格式:

AIFF(Windows 或 Macintosh)
Sound Designer II(仅限 Macintosh)
只有声音的 QuickTime 影片(Windows 或 Macintosh)
Sun AU(Windows 或 Macintosh)
System 7 声音(仅限 Macintosh)
WAV(Windows 或 Macintosh)
==========以上摘自flashMX2004帮助文档====

附上的图片
 

 

 

 

2

为预料的文件格式

打不开网上下载的fla源文件,提示“为预料的文件格式”

flash版本低了 目前(2005/3/19)最新版本flashMX2004 V7.2

3
载入外部文本文件中文出现乱码

文本另存为编码utf-8的
或者System.useCodepage=true放在_root第一帧
4
帮你加:
在按钮上关联一个网络链接的方法
on (release)
{getURL("你想关联的网址");}

//红色为输入部分
5
加载方面

加载外部swf到层

PHP代码:

onClipEvent (load) {
    
this.gotoAndstop(1);
}
onClipEvent (enterFrame) {
    
now = level2.getBytesLoaded()
    
all = level2.getBytesTotal()
             
loaded = int(now/all*100);
    
this.gotoAndStop(loaded);
    
this.bfb = loaded+"%";
    if (
now == all) {
        
_root.gotoAndPlay("begin");
    }
}

加载到MC

PHP代码:

this.onEnterFrame = function() {
    if (
this.getBytesLoaded()<this.getBytesTotal()) {
        
Total = this.getBytesTotal()/1000;
        
Received = this.getBytesLoaded()/1000;
        
Percentage = (Received/Total)*100;
        
loaded = int(Received/Total*100);
        
percent = loaded+"%";
        
_root.player.musicper = this.percent;
        
_root.player.musicbar.gotoAndStop(int(Percentage));
    } else {
        
gotoAndPlay(2);
        
this.onEnterFrame = null;
    }
};
stop();

加载记事本文件

PHP代码:

mytxtData = new LoadVars();

mytxtData.onData = function(rw) {
    if (
rw.indexOf("\r\n")>-1) {
        
trace("oker ");
    }
    
a_txt.text = replacePunc(rw);
};

function replacePunc(str) {
    var
tempArray = str.split("\r\n");
    var
tempstr = new String();
    for (var
i = 0; i<tempArray.length; i++) {
        
tempstr += tempArray[i]+newline;
    }
    return
tempstr;
}

System.useCodepage = true;
mytxtData.load("mydata.txt");

加载XML文件

PHP代码:

var doc1 = new XML();
//---------------------
doc1.ignoreWhite = true;
doc1.load("data.xml");
doc1.onLoad = function(success) {
    if (
success) {
        
e = doc1.firstChild.firstChild;
        
a = e.attributes.kind;
        
b = e.childNodes[0].firstChild.nodeValue;
        
c = e.childNodes[1].firstChild.nodeValue;
        
d = e.childNodes[2].firstChild.nodeValue;
        
text1 = a+"----------"+b+"----------"+c+"----------"+d;
    } else {
        
trace("载入失败");
    }
};
stop();

直接载入图片

PHP代码:

pic = new Array();
for (
i; i<9; i++) {
    
pic[i] = "mypic"+i+".jpg";
    
loadMovie(pic[i], "mc"+i);
    
trace(pic[i]);
}

载入MP3音乐(直接)

PHP代码:

myMusic = new Sound(_root.mySound);
myMusic.loadSound("song1.mp3", false);
myMusic.setVolume(130);
var
playing = false;
preloading = true;
this.onEnterFrame = function() {
    
mTotal = _root.myMusic.getBytesTotal();
    
mLoaded = _root.myMusic.getBytesLoaded();
    if (
preloading == true && mLoaded > 0){
        
mPercent = Math.round((mLoaded/mTotal)*100);
        
_root.preloader._visible = true;
        
_root.preloader.mFiller._xscale = mPercent;
        if(
mPercent >= 100){
            
myMusic.start(0,999);            
            
preloading = false;
            
playing = true;
            
_root.preloader._visible = false;
            
delete this.onEnterFrame;
        }
    }
};

6
flash中的"关闭"按纽

关闭flashPlayer播放器

代码:
btn.onRelease=function(){fscommand('quit',true)}

关闭网页窗口

代码:
btn.onRelease=function(){window.close();}//IE6有"是否关闭"提示

代码:
btn.onRelease=function(){javascript :o pener=null;window.close();}//无提示关闭

关闭嵌在网页里的广告
用js的隐藏层
javascript:

代码:
document.all.myFlash.style.display=none;//myFlash是flash所在object的id

或者

代码:
btn.onRelease=function(){_root._visible=0}

btn为按纽的实例名

7
qustion:在按钮中添加音乐
如下图方法操作,先将音乐文件导入(ctrl+r)到库中,在元件的按钮中的,经过帧上(先插关键帧),将库中的音乐文件拖入
注意:声音"属性面板"中的同步选项应改为"事件",声音才能起作用

附上的图片
 

8
如何利用场景中的影片剪辑中的按钮到达另一个场景
question:在场景1中采用了一个动画剪辑,这个动画剪辑中包含了一个按钮,想在这个按钮上设定动作“转到场景2,并播放第一帧”,但是使用“gotoandstop("场景2",1)”后,实现不了效果,单击按钮后到达的是这个动画剪辑的第一帧。
answer:
首先考虑
路径问题:
on(release)
{
_root.gotoAndPlay("label");
}
其中label是要转到桢的标签,可以不在同一场景
gotoAndPlay("场景1",1)这种写法 在mc里的按钮上可能出现问题

其次,有这么几种方法
方法一:(使用telltarget命令)

按钮上的as为:
on (release) {
tellTarget ("/") {
gotoAndPlay ("场景 1", 1);
}
}
方法二(用gotoandplay命令)
主场景2中的mc放到场景2的时间轴上
按钮的as: on release {
      gotoAndPlay("场景1",1)
       }
并且在最后一帧加stop()
问题就可以解决了:
方法三(利用路径_root.gotoandplay())

第二个场景2里面只有一个mc,在这个mc的最后一帧是stop 
和一个replay按钮
按钮的as:_root.gotoAndPlay(1)
【即告知按钮回到场景1的第一帧】

方法四(给场景起不同的名字)
如果你的as这样写:
第二个sence里面只有一个mc,在这个mc的最后一帧是stop 和一个replay按钮
按钮的as: on release {
      gotoAndPlay("sence1",1)
       }
结果按下后却是从这个mc的第一帧开始播放,而不是从sence1的第一帧
这是因为主场景的名字默认为senceN
MC里也可以有多个场景,而mc也是默认为senceN
所以当你在MC用上gotoAndPlay ("scene1", 1);时,指的是所在场景中MC里的第一帧,
而不是主场景
解决的方法,就是给场景定义不同的名字
scene1我们改名为:主场景
scene2我们改名为:次场景1
正确的as应该为:
on (release) {
tellTarget (_root) {
gotoAndPlay (1);
}
}
如果想实现按钮点击后从次场景播放
就可以在按钮上写上:
on (release) {
tellTarget (_root.次场景) {
gotoAndPlay (1);
}
}
方法五(利用标签label)
我们在控制动画的时候一般也不是从开始播放,
可能是希望从某个场景的某一个关键帧开始播放,那么标签是
最好的实现方法;
例如我们希望点击上面的按钮的时候让动画从主场景中的label1开始
播放,那么按钮上的as应该为:
on (release) {
tellTarget (_root) {
gotoAndPlay ("label1");
}
例如有3个场景,我们希望点击上面的按钮的时候让动画从次场景1中的label4开始
播放,那么按钮上的as应该为:
on (release) {
tellTarget (_root) {
gotoAndPlay ("次场景 1", "label4");
}
}

}
}
如果想实现按钮点击后从次场景播放
就可以在按钮上写上:
on (release) {
tellTarget (_root.次场景) {
gotoAndPlay (1);
}
}
方法六: (使用loadMovie命令)
先把这些小场景和主场景放在同一层目录下,给它们都写上英文名字(必须是英文),然后在主场景的按钮上写下以下AS
on (release) {
loadMovie("场景名.swf",1);
}

9
一本正经 响应键盘的一般方法介绍

这些是以前整理的,现在发上来,希望对新手有所帮助……响应键盘的方法作为AS中的一个重要组成部分,在如今已经越来越广泛使用,尤其是在 FLASH游戏制作中,如果缺少了响应键盘的方法,那是不可能的,而响应键盘的方法也就是 主要的四种,分别是: 1、利用按钮进行检测 2、利用KEY对象
3、利用键盘侦听的方法 4、利用影片剪辑的keyUp和keyDown事件来实现响应键盘
只有熟练掌握了这些方法,然后加以变通的话,就会得到很多意想不到的效果, 下面我就结合理论和自己的想法简要的介绍一下。

第一种响应键盘的方法:利用按钮进行检测来实现响应键盘在按钮的on事件处理函数中不但可以对鼠标事件作出响应,而且可以对键盘事件作出响应。 如在按钮的动作面板中加入如下所示的代码,在敲击键盘上的X键时输出窗口中将提示: X is pressed
在按钮上加上:

on (keyPress "x") {
trace("X is pressed");
}但是要注意的是:检测键盘上的字母键时,字母都应为小写。如果要检测键盘中的特殊键, Flash中有一些专门的代码来表示它们,下面列出了一些常用的功能键的表示代码:
<Left> <Right> <Up> <Down> <Space <Home> <End> <Insert> <PageUp> <PageDown>
<Enter> <Delete> <Backspace> <Tab> <Escape>
如要检测键盘上的<Left>键,可以使用下面的ActionScript:
on (keyPress "<Left>") {
trace("Left is pressed");
} 另外,你可以在一个按钮中加入若干个on函数,也可以在一个on函数中结合多种事件,这使 您可以为按钮定义自己熟悉常用的快捷键,如下所示:
on (release, keyPress "<Left>") {
_root.myMC.prevFrame();
}
on (release, keyPress "<Right>") {
_root.myMC.nextFrame();
}上面的第一个语句实现单击按钮或按键盘上的左方向键,控制影片剪辑myMC回退1帧,
而上面的第二个语句实现单击按钮或按键盘上的右方向键,控制影片剪辑myMC前进1帧。

最后给出实例原文件:方法1.fla

方法二

第二种响应键盘的方法:利用Key对象来实现响应键盘的操作

利用按钮检测按键动作很有效,但是并不利于检测持续按下的键,所以不适合于制作某些通过键盘控制的游戏。
这时,您就需要用到Key对象。Key对象包含在动作面板的“对象”/“影片”目录下面,它由Flash内置的一系列方法、常量和函数构成。使用Key对象可以检测某个键是否被按下,如要检测左方向键是否被按下,可以使用如下ActionScript:

if (Key.isDown(Key.LEFT)) {
trace("The left arrow is down");
}函数Key.isDown返回一个布尔值,当该数中的参数对应的键被按下时返回true,否则返回false。常量Key.LEFT代表键盘上的左方向键。当左方向键被按下时,该函数返回true。
Key对象中的常量代表了键盘上相应的键,下面列出了一些基本的常量:
一些功能键的表示:
Key.BACKSPACE Key.ENTER Key.PGDN
Key.CAPSLOCK Key.ESCAPE Key.RIGHT
Key.CONTROL Key.HOME Key.SHIFT
Key.DELETEKEY Key.INSERT Key.SPACE
Key.DOWN Key.LEFT Key.TAB
Key.END Key.PGUP Key.UP
以上是键盘上的功能键,那么如何表示键盘上的字母键呢?
Key对象提供了一个函数Key.getCode来实现这一功能,如下所示:
if (Key.isDown(Key.getCode("x"))) {
trace("X is pressed");
}上面脚本的意思就是,利用Key.getCode函数来告诉系统你是否按下了x键,如果按下了x键以后,函数Key.isDown则会返回true,在输出窗口就会输出X is pressed。

最后给出实例原文件:方法2.fla

方法三

第三种响应键盘的方法:利用键盘侦听的方法来实现响应键盘(个人习惯用这种方法)

假设在影片剪辑的onClipEvent(enterFrame)事件处理函数中检测按键动作,而影片剪辑所在的时间轴较长,或计算机运算速度较慢,就有可能出现这种情况:即当在键盘上按下某个键时还未来得及处理onClipEvent(enterFrame)函数,那么按键动作将被忽略,这样的话,很多你想要的效果就会无法实现了。
另外,还有一个需要解决的问题就是,在某些游戏(如射击)中,我们需要按一次键就执行一次动作(发射一发子弹),即使长时间按住某个键不放也只能算作一次按键,而Key对象并不能区别是长时间按住同一个键还是快速地多次按键。
所以如果要解决这个问题,就需要用到键盘侦听的方法。你可以使用 “侦听器(listener)”来侦听键盘上的按键动作。
要使用侦听器之前,首先需要创建它,你可以使用如下所示的命令来告诉计算机你需要侦听某个事件:

Key.addListener(_root);Key.addListener命令将 主时间轴 或 某个影片剪辑 作为它的参数,当侦听的事件发生时,可以用这个参数指定的对象来响应该事件。
上面的代码指定主时间轴来响应该事件。要让主时间轴对该事件作出响应,还需要设置一个相应的事件处理函数,否则设置侦听器就没有什么意义了。
键盘侦听的事件处理函数有两个:onKeyUp和onKeyDown,如下所示: Key.addListener(_root);
_root.onKeyUp = function() {
trace(Key.getAscii());
};//代码的意思是,当按下一个键并释放后,输出窗口将输出你按下的那个键的Ascii码
当然,你也可以使用影片剪辑作为侦听键盘的对象,只需要使用影片剪辑的路径代替_root作为Key.addListener命令的参数就可以了。
比如下面代码: Key.addListener(_root.mc);
_root.mc.onKeyUp = function() {
trace(Key.getAscii());
};//代码的意思是,当按下一个键并释放后,输出窗口将输出你按下的那个键的Ascii码,意思差不多,但是键盘侦听对象不同,一个是影片mc,一个是主时间轴。

最后给出实例原文件:方法3.fla

方法四

第四种响应键盘的方法:利用影片剪辑的keyUp和keyDown事件来实现响应键盘

最后一种方法很容易被忽视,但是也有一定的应用价值,最重要的是把概念弄清楚。
影片剪辑包含两个与键盘相关的事件keyUp和keyDown,使用它们也可以实现对按键事件的响应
例如下面的代码:

onClipEvent (keyDown) {
trace(Key.getAscii());
}//当按下键盘上的一个键的时候,输出窗口将输出按下的这个键的Ascii码值。
函数Key.getAscii表示返回与按键相对应的ASCII码,其中 ASCII码是一个整数,键盘上的每个字符对应一个ASCII码,如字母A对应的ASCII码为65,B对应的ASCII码为66,a对应的ASCII码为97, b对应的ASCII码为98,+ 对应的ASCII码为43等。需要注意的是:只有字符键才有ASCII码,键盘上的功能键是没有ASCII码的。
如果我想在输出窗口中输出与按键相对应的字符,那怎么办?
这时候,你可以使用String对象的fromCharCode函数将ASCII码转换成字符,如将上例的代码改成如下所示:
onClipEvent (keyDown) {
trace(String.fromCharCode(Key.getAscii()));
};//意思就是说,当按下键盘的一个键,输出按下的这个键相对应的字符,当然除了功能键。
关于String对象的详细解释,大家可以查看动作面板的“对象”/“核心”目录下面。


评论

该日志第一篇评论

发表评论

评论也有版权!