游戏开发论坛

 找回密码
 立即注册
搜索
查看: 20545|回复: 36

关于Shockwave Flash控件的深入了解

[复制链接]

5

主题

110

帖子

110

积分

注册会员

Rank: 2

积分
110
发表于 2008-7-18 01:20:00 | 显示全部楼层 |阅读模式
今天我要给大家一个关于怎样用Shockwave Flash控件读取PNG文件的教程,首先我们先介绍一下PNG图形的特点:
1.使用调色板可支持256种颜色的彩色图像.
2.图像文件格式允许连续读出和写入图像数据,这个特性很适合于在通信过程中生成和显示图像.
3.支持图形的全透明或部分透明.
4.独立于计算机软硬件环境.
5.使用无损压缩.

下面是使用PNG图像和使用BMP图像(使用了TransparentBlt画图)的区别:
sf_200871811945.jpg

5

主题

110

帖子

110

积分

注册会员

Rank: 2

积分
110
 楼主| 发表于 2008-7-18 01:20:00 | 显示全部楼层

Re:关于Shockwave Flash控件的深入了解

所以说PNG图应该是制作2D游戏的最好选择,而我们要读取PNG图却有很大的难度,所以我今天教大家一个简单且高效率的读PNG文件的方法,希望有更多的人使用Flash控件和PNG图来做2D游戏.

=================================
实现读取并使用PNG文件的具体方法:
=================================
首先我们需要添加Shockwave Flash控件(系统自己附有的),然后打开Falsh编辑器,将你要读取的PNG图片载入,每张图片占一帧,且每帧都要加上"stop"方法,然后生成*.swf文件(当然,你可以改变默认后缀名使别人不知道他是Flash文件),最后在VB(6)中使用"Flash控件名.movie ="来读取刚刚那个文件,并将WMode改为"TransParent",这样,就可以通过"GotoFrame 指定帧数"来读取swf文件指定的PNG图片啦,如果还不懂的话可以问我
QQ:995109087
Email:995109087@qq.com

==================================
FLASH播放器控件相关属性和方法说明.
==================================

++++++++++++++++++++++++
++++++++++属性++++++++++
++++++++++++++++++++++++
语法:AlignMode As Long
说明:对齐方式(与SAlign属性联动).当控件的长宽比例与影片不一致且WMode不为ExactFit时,影片在控件中显示的位置可用该属性调整.
属性值与相应的对齐方式:
1:左对齐
2:右对齐
4:顶对齐
8:底对齐
注意:也可以组合各种对齐方式,就是将这四个基本值组合相加.比如同时左对齐和顶对齐,属性值则设为5.

语法:BackgroundColor As Long
说明:影片的背景色.默认的影片背景色为-1.如果影片设置了底色或有图片当作背景,那么看不出来该属性值的改变会有什么影响 。
注意:颜色值使用RGB格式的颜色值

语法:Base As String
说明:指定用于解决影片中所有相对路径的声明的基地址.当影片与其需要的其他文件不在同一目录中的时候该属性特别有用.如不特别指定,Base的值默认为".",也就是当前影片所在的路径.

语法:BGColor As String
说明:影片的背景色.与BackgroundColor不同的是,BGColor是一个六位的十六进制数,每两位分别代表红绿蓝颜色值.如:FFEEAA表示R值为FF,G值为EE,B值为AA.

语法eviceFont As Boolean
说明:决定是否使用影片内嵌的字体,默认值为False.将该属性值设为True则强制播放器不使用影片中内嵌的字体而使用本地系统字体.

语法:EmbedMovie As Boolean
说明:影片是否被存贮到控件所在的容器中.当你已载入一个影片后将该属性设为True,播放影片时就不必再去读取SWF文件了.这样可以使SWF文件镶进程序中,不必再读取文件.但将该属性设为True后,控件的Movie属性就不再接受新的值了.要想播放另一个影片(给Movie属性赋新值),必须先将该属性(EmbedMovie)设为False.


语法:FrameNum As Long
说明:影片当前帧的编号(从0开始计数).设置该属性值将使影片停在由FrameNum指定的帧处.
注意:不仅可以从中获得当前帧,还可以设置当前帧,即跳转到某帧

语法oop As Boolean
说明:控制影片是否循环播放.设为True就是循环播放,设为False则只播放一次.

语法:Menu As Boolean
说明:是否显示菜单.设为True显示所有菜单,设为False菜单被屏蔽,但仍有一项"About Macromedia Flash Player...",点击后会打开Macromedia的网站.如果你实在不喜欢这个菜单,应该在程序中通过拦截鼠标消息的方法来达到目的.

语法:Movie As String
说明:要播放的影片路径(URL).设置该属性为一个SWF文件的URL,当该属性被设置后,控件将自动载入文件并播放它.

语法laying As Boolean
说明:当前播放状态.如果影片正在播放,该属性值为True,否则为False.

语法uality As Long
说明:画面质量.
Quality的属性可以取:
0:相当于Quality2取"Low"
1:相当于Quality2取"High"
2:相当于Quality2取"AutoLow"
3:相当于Quality2取"AutoHigh"

语法:Quality2 As String
说明:画面质量
Quality的属性可以取:
Low:偏重于播放速度而不管显示效果,而且不启用消除锯齿功能.
High:偏重于画面而不管播放速度,并且总是启用消除锯齿功能.如果影片中不包含动画就平滑处理位图;如果有动画,那么位图就不被平滑处理.
AutoLow:先着重于播放速度,但只要有可能就改善显示效果.一开始播放时先禁用消除锯齿功能.如果播放器检测到处理器能承受得了,就启用消除锯齿功能.
AutoHigh:一开始是播放速度和显示效果并重,但如有必要就牺牲画质确保速度.开始播放时就启用消除锯齿功能.但如果实际的帧速率比设计时指定的速率慢了,就禁用消除锯齿功能来提高播放速度.

语法:ReadyState As Long
说明:影片的当前状态.
ReadyState的值有:
0:正在载入
1:未初始化
2:已载入
3:正在交互
4:完成例子
注意:可以使用该属性来粗略的判断SWF文件的读取进度,但如果想得到更精确的判断,应该在在SWF文件中使用FScommand()来达到与VB的互动与联系,即传送资料给VB.

语法:SAlign As String
说明:对齐模式.与上文的AlignMode相同,但值的形式不同罢了.
可取值:
L:即左对齐
T:即顶对齐
R:即右对齐
B:即底对齐
注意:当使用组合对齐方法是L,T,R,B的先后顺序不能变,如:左和底的对齐:SAlign="LB"

语法:Scale As String
说明:控制影片的缩放模式.
Scale的值可以取:
ShowAll:在控件内显示全部影片区域,保持影片长宽比例不变,影片的大小决定于控件长或宽中较小的一边.
NoBorder:在控件内显示部分影片区域,保持影片长宽比例不变,影片的大小决定于控件长或宽中较大的一边.
ExactFit:在控件内显示全部影片区域,不考虑影片的长宽比例,强制将影片的长宽等于控件的长宽.

语法:ScaleMode As Long
说明:缩放模式,与Scale相同,只不过属性值为数字而已.
ScaleMode可以取:
0:相当于Scale取"ShowAll"
1:相当于Scale取"NoBorder"
2:相当于Scale取"ExactFit"

语法:TotalFrames As Long
说明:返回影片中总帧数.该参数要到影片载入完成才有效,即ReadyState=4

语法:WMode As String
说明:控件的窗口模式(实现矢量图在VB界面显示的重要属性).
WMode可以取:
Window:WMode属性的默认值,按Flash播放器典型的方式工作,即在控件的矩形窗口中播放影片,这样一般都能提供最快的动画效果.
Opaque:使影片不透明.
Transparent:创建一个透明的影片,如果影片中有透明的片段时,就可以看到控件下面的背景.但使用此属性值,动画的播放速度可能会慢一些.


++++++++++++++++++++++++
++++++++++方法++++++++++
++++++++++++++++++++++++
语法:Back()  
说明:影片后退一帧,并且停止播放.

语法:Forward()
说明:影片前进一帧并且停止播放例子.

语法:GotoFrame(FrameNum)
说明:将影片跳转到指定的帧,并且停止播放.如果所指定的帧还未载入,在调用过程中会产生无法预料的后果,最好使用PercentLoaded方法来确定是否已载入足够的影片来执行本方法.参数FrameNum是从0开始算的,这和Flash中的Goto动作不一样,Goto是从1开始算的.

语法:LoadMovie(layer As Long, url As String)
说明:将由url指定的影片载入到由layer指定的层上.

语法:Pan(x As Long, y As Long, mode As Long)
说明:将一个放大过的影片平移由x和y指定的距离,x和y均为相对值,即控件相对于影片来说平移的距离.用mode参数来指定x和y的值是像素还是窗口的百分比,当mode=0时坐标系以像素为单位;mode=1时坐标系就以窗口的百分比来计算.平移并不能超出影片的边框,也就是说,往一个方向平移最多到达影片的边缘与控件对齐的程度.

语法:Play()
说明:开始播放影片.

语法:Rewind()
说明: 倒带,返回到影片的第一帧.

语法:SetVariable(name As String, value As String)
说明:将由name指定的Flash变量值设为value(即通过VB传送数据给影片).
例子:movie.SetVariable "/Form:UserName", "SYFY"

5

主题

110

帖子

110

积分

注册会员

Rank: 2

积分
110
 楼主| 发表于 2008-7-18 01:39:00 | 显示全部楼层

Re:关于Shockwave Flash控件的深入了解

好了,主要内容讲光光了,希望大家满意,而以下则是在下的一些使用Shockwave Flash编游戏的心得,各位可看亦可略过:

我个人觉得使用Flash控件编写游戏在速度和画面上有很大的优势,而我认为使用Flash控件编2D的RPG游戏有两种途径:
1.完全使用Flash编成Flash游戏,然后使用VB载入游戏文件,并通过FScommand和SetVariable命令来使VB和Flash互相交换数据,从而达到游戏的储存和读取;
2.只使用Flash控件来储存游戏的图片和动画,并通过GotoFrame来读取指定的图片或动画,游戏的主要性息处理部分还是由VB来担任.

个人意见,不值一谈.

5

主题

110

帖子

110

积分

注册会员

Rank: 2

积分
110
 楼主| 发表于 2008-7-18 02:24:00 | 显示全部楼层

Re: Re:关于Shockwave Flash控件的深入了解

下面这张图是用PNG图片拼合的:


sf_200871822421.jpg

5

主题

110

帖子

110

积分

注册会员

Rank: 2

积分
110
 楼主| 发表于 2008-7-18 02:26:00 | 显示全部楼层

Re: Re:关于Shockwave Flash控件的深入了解

而这张是使用BMP图片并用TransparentBlt画出来的:


sf_200871822558.jpg

5

主题

110

帖子

110

积分

注册会员

Rank: 2

积分
110
 楼主| 发表于 2008-7-18 02:38:00 | 显示全部楼层

Re:关于Shockwave Flash控件的深入了解

画面的质量相差太远了,其主要原因是因为PNG图片可存储多到16位的α(Alpha)通道数据,这样就能使图片的每个像素点都有自己的透明度,而BMP不支持透明色,就算通过API来设置透明色,也无法设置每个点的透明度,而GIF虽然支持透明色,但不支持透明度,所以画面的质量远低于PNG,而且PNG使用从LZ77派生的无损数据压缩算法,使图片的大小大大减少.所以说,我很看好使用PNG来制作2D游戏,至于3D游戏,我可以说了解不多,能不能用都不知道,更不用说适不适用了.

5

主题

110

帖子

110

积分

注册会员

Rank: 2

积分
110
 楼主| 发表于 2008-7-18 02:49:00 | 显示全部楼层

Re: Re:关于Shockwave Flash控件的深入了解

如果觉得用Flash控件读取PNG不好,可以使用以下的一个用户自定义控件(开源),但速度及灵活性就比不上Flash控件了,如果你也有读取PNG的方法,希望你能告诉我,谢了!

啊,好累啊,终于完稿了. [em10]

sf_20087182493.zip

339.7 KB, 下载次数:

5

主题

110

帖子

110

积分

注册会员

Rank: 2

积分
110
 楼主| 发表于 2008-7-18 04:51:00 | 显示全部楼层

Re: Re: Re:关于Shockwave Flash控件的深入了解

jnmao: Re:用VB实现读取PNG图像的一种好方法

好啊,强力支持,对了,能不能写个VB播放FLV格式的程序,我找了好久了。

你要我弄的已经搞好了,整整花了我1个小时去研究,(好累啊),但由于时间问题,界面还很粗糙,但经改装后绝对能和专业播放器媲美.
[em1]

sf_200871845115.rar

30.58 KB, 下载次数:

5

主题

110

帖子

110

积分

注册会员

Rank: 2

积分
110
 楼主| 发表于 2008-7-18 04:54:00 | 显示全部楼层

Re:关于Shockwave Flash控件的深入了解

夜深了,老爸骂了,又得睡觉了,大家中午见.

270

主题

6442

帖子

6446

积分

论坛元老

Rank: 8Rank: 8

积分
6446
发表于 2008-7-18 08:02:00 | 显示全部楼层

Re:关于Shockwave Flash控件的深入了解

我在游戏里大量使用PNG和TGA,主要是它的高透明度和通道。

使用BMP一样可以和PNG差不多,但处理透明BMP比较麻烦,就是要先把显示的部分转成256色,再贴到一个单色的背景上,可以达到同样效果。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2026-1-21 18:04

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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