制作并应用.skn皮肤

转自 http://ttplayer.qianqian.com/help.php?t=72

 

按照四个步骤进行:(A)切图(B)修改配置文件(C)打包成皮肤文件(D)应用皮肤

(A)切图:
用PS或FW打开设计效果图,整体观察一下,下面讲一下哪些图片是要单独切出来的以及图片的命名。

一、主窗口的控件
(1)主窗口背景   命名:player_skin.bmp
 

重点:边缘小圆角的镂空处理,把镂空填充成(#ff00ff)这个颜色,要细心处理这部分哦,边缘要1像素1像素的填充(如上图,镂空部分的颜色处理)

(2)最小化按钮(4个状态)
命名:minimize.bmp

重点:凡是功能按钮都要做4种状态,并把这四种状态做在一张图里,存储成.BMP格式,注意每种状态按钮他的宽度和高度要一致,说一下每种状态代表的含义
第一个状态:自然状态
第二个状态:鼠标划过时的状态
第三个状态:鼠标按下去时的状态
第四个状态:按钮失效时的状态(举个例子,比如播放列表只有一首歌曲,那么“下一首”按钮就是无法点击的,那么此时这个按钮状态就是失效时的状态)

...

(类似的剪切,镂空,整合这些图片,最后保存成为相应的名字)

 

(B)修改配置文件
一、首先看一下skin.xml这个配置文件
<skin version="2" name="静听•蔚蓝" author="千千静听" url="http://www.ttplayer.com" email="none" transparent_color="#ff00ff">
以上是皮肤的基本描述信息,请根据您自己的情况填写,分别是版本号,皮肤名称,皮肤作者,地址,电子邮箱,透明色的设置
1、<player_window>和</player_window>之间的代码
它是描述主窗口的参数设置的
Position 是坐标定位,image是图片名称,就是我刚才讲述的每个图片的命名
坐标由4个数字组成,中间用逗号隔开,前两个数字是图片左上角的x坐标和y坐标,后两个数字是图片右下角的x坐标和y坐标,请注意,这里的右下角x坐标和y坐标都要多算一个点,否则播放器会少显示两条边;
这里需要注意的是:每个窗口的位置是组合窗口后抓的坐标,而每个窗口上面的按钮控件是单独定位的,比如,我们要获得歌词秀窗口上面的关闭按钮的坐标,是要把歌词秀窗口的左上角定位在切图软件(0,0)坐标上,然后再抓关闭按钮的坐标。
可以参考下图来理解代码

<player_window image="player_skin.bmp">
<play position="50, 123, 90, 163" image="play.bmp"/>
<pause position="50, 123, 90, 163" image="pause.bmp"/>
<prev position="9, 123, 49, 163" image="prev.bmp"/>
<next position="132, 123, 172, 163" image="next.bmp"/>
<stop position="91, 123, 131, 163" image="stop.bmp"/>
<mute position="183, 137, 194, 148" image="mute.bmp" />

<lyric position="248, 112, 272, 126" image="lyric.bmp"/>
<equalizer position="223, 112, 242, 126" image="equalizer.bmp"/>
<playlist position="197, 112, 216, 126" image="playlist.bmp"/>
<browser position="214, 86, 276, 106" image="browser.bmp" />

<minimize position="230, 3, 247, 21" image="minimize.bmp"/>
<minimode position="248, 3, 265, 21" image="minimode.bmp"/>
<exit position="266, 3, 283, 21" image="close.bmp"/>

<progress position="7, 112, 184, 123" bar_image="" thumb_image="progress_thumb.bmp" fill_image="progress_fill.bmp"/>
<volume position="197, 136, 277, 147" vertical="false" bar_image="" thumb_image="progress_thumb.bmp" fill_image="progress2.bmp"/>


以下文字是播放器上面的一些显示文字的设置
Icon是千千静听的logo;
info是音乐标题和专辑歌手的信息,轮显在播放器窗口上;
led是时间数字,这里不是文字代码,是做好了一张图片,这张图片由大小相等的12个字符组成, 0 1 2 3 4 5 6 7 8 9 : -
记住这12个字符缺一不可。
Stereo  是立体声的字体设置
Status是状态的字体设置
Visual是视觉效果的设置,这里面只是简单定义了位置,更详细的设置请看Visual.xml文件

<icon position="4, 3, 20, 19" image="TTPlayer.ico"/>
<info position="21, 34, 208, 49" color="#ffffff" font="Tahoma" font_size="13" align="left"/>
<led position="160, 37, 270, 49" image="number.bmp" align="right"/>
<stereo position="224, 54, 273, 70" color="#ffffff" font="Tahoma" font_size="13" align="right" />
<status position="200, 70, 273, 86" color="#ffffff" font="Tahoma" font_size="13" align="right" />
<visual position="17, 56, 185, 106"/>
</player_window>


2、歌词秀窗口的代码
参考如下图一起看

<lyric_window position="0, 393, 287, 475" resize_rect="49, 25, 245, 73" image="lyric_skin.bmp">
<lyric position="10, 25, 277, 73"/>
<close position="221, 3, 283, 20" image="close.bmp" align="right"/>
<ontop position="202, 3, 264, 20" image="ontop.bmp" align="right"/>
</lyric_window>

 

(类似制作修改其他界面...)

 

二、下面看一下Lyric.xml这个配置文件
以下是歌词文字的设置,分别定义了字体类型,字体颜色,高亮颜色和背景颜色
<ttplayer_lyric>
<Lyric 
Font="-11,0,0,0,400,0,0,0,134,3,2,4,49,Tahoma" 
TextColor="#008CC1" 
HilightColor="#005489" 
BkgndColor="#F4FBFE" />
</ttplayer_lyric>

三、下面看一下Playlist.xml这个配置文件
这个是播放列表窗口的文字设置,分别定义了字体类型,字体颜色,高亮颜色,第一背景颜色,数字颜色,时间颜色,当前选择颜色,第二背景颜色(可以和第一背景颜色一致)
<ttplayer_playlist>
 <PlayList
  Font="-11,0,0,0,400,0,0,0,134,3,2,4,49,Tahoma"
  Color_Text="#008CC1"
  Color_Hilight="#005489"
  Color_Bkgnd="#EAF5FA"
  Color_Number="#005489"
  Color_Duration="#005489"
  Color_Select="#84CEF9"
  Color_Bkgnd2="#EAF5FA"
 />
</ttplayer_playlist>

四、下面看一下Visual.xml这个配置文件
这个是用来设置视觉显示的效果,我们先给大家介绍一下千千静听都提供哪几种视觉效果:
1、 频谱分析
2、 梦幻星空
3、 视波显示
4、 专辑封面
5、 不显示视频效果
这5种情况只要在播放器主窗口上面点击鼠标右键即可切换
如图:

下面的配置文件是用来设置各种视觉效果颜色的,大家可以试试看,调出你喜欢的效果来
<ttplayer_visual>
 <Visual
  SpectrumTopColor="#FFFFFF"
  SpectrumBtmColor="#07F7FF"
  SpectrumMidColor="#8CDCFF"
  SpectrumPeakColor="#FFFFFF"
  SpectrumWide="1"
  BlurSpeed="3"
  Blur="1"
  BlurScopeColor="#07F7FF"
  TextColor="#FFFFFF"
  Font="-11,0,0,0,400,0,0,0,134,3,2,4,49,Tahoma"
 />
</ttplayer_visual>

(C)打包成皮肤文件
好了,以上就是皮肤制作的整个过程啦,把上面的切图和配置文件制作好后,就可以打包成皮肤文件了,可以用WinRAR或WinZIP等压缩工具,以WinRAR为例,先按键盘上的Ctrl+A全选所有文件,然后将全部文件添加到压缩文件夹,压缩文件格式选择"zip",压缩方式可选择"最好",再点击"确定"就行了!
(D)应用皮肤
将这个压缩文件复制到千千安装目录下的Skin文件夹,然后在"千千选项..."-"皮肤"中就可以选择应用皮肤了,或直接在主面板上点击右键-"选择皮肤"即可!

 

或许您已经了解皮肤的制作方法了,为了更深入的理解,我们增加以下部分的内容帮助您消化:


三、几个重要的属性解释
position:这是众元素中最基本的属性之一,用于定义窗口背景及按钮的位置及大小,参数值格式为 "a, b ,c ,d",这4个数值既固定了元素的位置也确定了其大小,其中(a, b)为左上角的坐标,(c, d)为右下角的坐标,c-a 就是长度,d-b 就是高度,坐标原点要分两种情况:如果是歌词秀、均衡器、播放列表这3个子窗口的position,则是把主窗口的左上角作为它们的坐标原点;如果是各窗口内部按钮的position,则是把对应的各窗口的左上角作为坐标原点,比如歌词秀窗口中的"关闭"按钮就是以歌词秀背景图片的左上角为原点,其它依此类推!

特别地:①播放列表中的scrollbar元素不需要定义position属性,它的位置会自动固定在playlist的最右边;②主窗口中的progress、volume元素及均衡器窗口中的balance、surround、preamp元素的position属性表示的是滑块能够移动的范围的坐标;③播放列表衡器窗口中的playlist元素、歌词秀衡器窗口中的lyric元素的position属性表示的是播放列表和歌词的显示范围,当播放列表窗口和歌词秀窗口改变大小时,这两个元素会自动跟着改变大小,但它们的四个边和窗口的四个边的距离就是通过这个position来体现的;
 resize_rect:歌词秀和播放列表窗口特有的属性,用于定义这两个窗口可被拉伸的部分,其参数格式同position,代表的是当改变窗口大小时只有这个矩形框内的部分才会被拉长,在这个范围外的部分则不会变化,另外还有一个属性resize_tile是对应使用的,其参数值可以为0或1,其中0表示在改变窗口大小时采用拉伸的方式,1表示采用平铺的方式,该属性可省略不写,即使用默认值0;

此外,歌词秀和播放列表窗口还有一个可选择的元素:title,可在有特定需要时(比如在改变窗口大小时标题保持居中等)使用,格式如下:

<title position="..." image="..." align="..." />
align:用于定义元素的对齐方式,参数值分两种情况:一种是存在于主窗口中的led、info、stereo、status元素内,此时可以取值为left、center、right,代表这些文字的缩进方式;第二种是存在于歌词秀窗口中的title、close、ontop元素内,播放列表窗口的title、close、toolbar元素内,此时可以取值为left、center、right、top、bottom等,代表当调整窗口大小时元素位置相对于边框移动,如果要同时设置垂直对齐和水平对齐方式,可以用英文加号将二者连在一起,比如"top+left"表示在垂直方向上顶部对齐、在水平方向上左对齐;
vertical:存在于主窗口中的progress、volume元素,参数值可以为true或false,其中取true时指滑块按垂直方向移动,取false时滑块按水平方向移动;
thumb_resize_center:存在于播放列表窗口中的scrollbar元素内,用于定义scrollbar的thumb滑块中间可以进行平铺缩放的部分的大小,如果取值为0,则代表在改变播放列表窗口高度大小时滑块进行不缩放;
thumb_resize_tile:存在于播放列表窗口中的scrollbar元素内,作用与播放列表窗口和歌词秀窗口的resize_tile相同;
hot_image:存在于播放列表窗口中的toolbar元素内,用于定义播放列表工具栏中当鼠标经过时的图片形态。此属性可选择,如省略不写的话程序会自动生成鼠标经过时的按钮状态;
eq_interval:存在于均衡器窗口中的equalizer_window元素内,指eqfactor元素中10个波段的间隔大小(另:eqfactor元素的position属性表示的是10个滑块中第一个滑块的位置,而其它属性对于所有10个滑块都有效);
icon:存在于主窗口中的icon元素内,用于自定义皮肤图标,必须将图标文件(*.ico,16*16)放于皮肤文件夹中并一起打包压缩。此属性可选择,如省略不写的话则使用默认的程序图标;
left_top_color、right_bottom_color:存在于歌词秀窗口中的mini_border元素内,用于定义在迷你模式下歌词秀窗口的左上边框和右下边框的颜色;
迷你窗口:
迷你模式其实是独立于主窗口外的另外一个皮肤,不过在迷你模式下省略了播放列表和均衡器窗口、简化了歌词秀窗口和主窗口。迷你窗口里的所有元素、属性及参数都是和主窗口一样的,它们都被包含于<mini_window>和</mini_window>中,相当于主窗口中的<player_window> </player_window>;
迷你模式就是为了减小屏幕大小占用及简化按钮,故迷你窗口各按钮也要相应调整缩小,并省略部分不常用的按钮,比如音量调节等,一般只保留下"播放/暂停"、"停止"、"后退"、"前进"、"静音"、"图标"、"视觉效果"等即可。另外,迷你模式下的歌词秀窗口的位置和长度是固定的,高度则是和迷你模式的背景图片高度相同。


四、皮肤制作注意事项及技巧:
1.压缩皮肤文件时,不是压缩整个文件夹,而是应该进入文件夹后按Ctrl+A全选所有文件,然后再添加到压缩文件(zip格式),否则皮肤无效;

2.播放列表和歌词秀窗口的position属性定义了这两个窗口初始化时的大小,这个大小可以不是图片的实际大小。这两个窗口在初始化时就会按照resize_rect的规则拉伸窗口至所设置的大小。此外,这两个窗口最大可以拉伸到与屏幕同样大小,但最小只能缩小到与原始图片同样的大小,所以原始图片应该尽量画得小一些,这样可以方便用户把窗口缩成最小,同时还可以稍微减少图片及皮肤大小;
注:这个时候窗口上的按钮的position属性是按图片的实际大小来确定坐标的;

3.bmp图片(尤其是几个面积较大的窗口背景图片)应尽量转换为8位的索引颜色,这样可以极大地减少图片及皮肤的大小,同时在应用皮肤时可以减少内存占用率。
具体的方法为:在Adobe Photoshop中,打开RGB模式的图片,然后点击"图像"-"模式"-"索引颜色",再保存即可!注:如果有透明色时要注意两点:①在填充透明色时,一定不要选"容差";②转换时一定要选中"保留原实际颜色",以防止填充的透明色被改掉。

4.当按钮很小的时候,不要将其透明,而是和背景图片连在一起!因为我们知道,皮肤中透明的部分是不感应鼠标动作的,因此当按钮比较小的时候如果中间有很小的缝隙,鼠标移动到上面时就会乱跳,不便于点击操作!如图所示:

5.在制作皮肤时最好做一部分预览一下效果,这样有问题的地方可以及时修改过来

6.如果不想在主窗口或迷你模式中显示千千静听的图标,可以将图标的position设置为超过窗口大小,比如"500, 500, 516, 516";
7.在主窗口中的led元素(即播放时间)有两种显示方式,一种是已播放的时间,一种是未播放的时间,鼠标点击即可在两种显示方式之间切换。后者比前者多了一个负号,因此在主窗口上应至少给led留出6位的空间,以防止在显示剩余时间时数字覆盖到面板上的其它部分而影响美观;led元素使用的图片必须是12张同样大小的图片排在一起,分别代表0-9十个数字、冒号和减号(可以使用透明色);
8.如果不想显示某个窗口或者各窗口上的某些元素,把相应的元素代码全部删除即可;
9.如果是用记事本打开XML文件的,那存储的时候尽量编码设置成ANSI;如下图所示:

10、关于坐标定位的小技巧:
大家注意一下坐标定义的问题,拿一个20*20的小图为例,它的位置是150,30,170,50,大家来看这个坐标,一定认为没有问题,但实际效果会显示不全,为什么呢,因为坐标的X轴有一个小小的误差问题,要多加2像素才可以哦,正确的定位是150,30,172,50。大家在制作时注意一下。 

制作千千皮肤的基本方法就只有这么多,但是技巧远不止这些,大家可以在制作的过程中不断实践摸索,并发挥自己的创造力,设计出各种有创意的皮肤来!

鸣谢:发呆的猴子,很高很瘦

五、新增桌面歌词工具条制作方法(2009年4月8日)

《图0》《图00》
首先要在歌词秀原来的代码中加入:
<desklrc position="按钮具体坐标" image="desklrc.bmp" align="right"/>
其中的“desklrc.bmp”就是桌面歌词开启按钮,见上图。

《图1》
制作桌面歌词面板,首先还是从背景图开始,方法和其他面板是一样的,文件名为“desklrc_bar.bmp”,效果见图1,代码示例如下:
<desklrc_bar image="desklrc_bar.bmp" transparent_color="#ff00ff"></desklrc_bar>
注意按钮的代码要写在<desklrc_bar>和</desklrc_bar>之间。

《图2》
桌面歌词皮肤元素主要包含12个按钮元素,制作过程和其他面板类似,下面按照摆放顺序进行讲解:

首先是制作功能图标位置,和主面板的icon一致,主要是定坐标,代码示例如下:
<icon position="11, 7, 27, 23" icon="TTPlayer.ico" />

 

原来看似很神奇的东西终于搞懂了...

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 可以使用Qt Quick框架提供的Qt 3D模块来渲染3D模型,并播放骨骼动画。下面是一个简单的例子:QQmlApplicationEngine engine; Qt3DAnimation::QSkeletonAnimationPlayer *player = new Qt3DAnimation::QSkeletonAnimationPlayer(); Qt3DAnimation::QAnimationClipLoader *clipLoader = new Qt3DAnimation::QAnimationClipLoader(); // 设置骨骼动画文件 clipLoader->setSource(QUrl(QStringLiteral("qrc:/animation/myanimation.skn"))); player->setAnimationClipLoader(clipLoader); player->setLoopCount(1); player->setPlaybackRate(1.0f); player->play();engine.load(QUrl(QStringLiteral("qrc:/main.qml"))); ### 回答2: 使用QT渲染3D模型并播放骨骼动画涉及到以下几个步骤: 1. 导入模型和动画文件:首先,需要将3D模型和骨骼动画文件导入到项目中。可以使用一些开源的工具(如Assimp)来加载各种模型和动画格式(如OBJ、FBX等)。 2. 创建场景和相机:使用QT的OpenGL渲染功能,创建一个OpenGL场景并添加一个相机,以便在场景中观察和渲染模型。 3. 设置渲染状态:设置OpenGL的渲染状态,包括清除颜色缓冲区、设置深度测试等。这些设置可以在QT的OpenGL窗口的初始化函数中完成。 4. 创建模型和骨骼动画对象:创建一个模型对象,可以使用加载模型文件得到的模型数据来初始化。同时,创建一个骨骼动画对象,可以使用加载动画文件得到的骨骼数据来初始化。 5. 更新骨骼动画:在每一帧渲染之前,需要更新骨骼动画的骨骼矩阵。可以根据当前帧的时间来计算出骨骼的变换矩阵,然后将其传递给渲染器进行渲染。 6. 绘制模型:创建一个渲染器对象,在每一帧渲染时,使用骨骼动画的骨骼矩阵来对模型进行渲染。可以使用OpenGL的绘制函数(如glDrawElements)来渲染模型的网格数据。 7. 事件循环:使用QT的事件循环机制,将渲染步骤和用户交互事件(如鼠标、键盘事件)结合起来,以实现交互式的3D模型浏览和动画播放。 下面是一段简单的示例代码,展示了如何使用QT渲染3D模型并播放骨骼动画: ```cpp #include <QApplication> #include <QOpenGLWidget> #include <QKeyEvent> #include <QMatrix4x4> // 创建一个OpenGL渲染窗口 class OpenGLWidget : public QOpenGLWidget { public: void initializeGL() override { // 设置OpenGL的一些渲染状态 glClearColor(0.0, 0.0, 0.0, 1.0); glEnable(GL_DEPTH_TEST); } void paintGL() override { // 在每一帧渲染时,更新骨骼动画的骨骼矩阵 // 绘制模型 } void resizeGL(int w, int h) override { // 改变窗口大小时,更新视口 glViewport(0, 0, w, h); } void keyPressEvent(QKeyEvent *event) override { // 处理键盘事件 } }; int main(int argc, char *argv[]) { QApplication a(argc, argv); OpenGLWidget widget; widget.show(); return a.exec(); } ``` 在上述示例代码中,基础的OpenGL渲染环境已经创建,并实现了一些必要的函数。你需要根据你的模型格式和动画格式,使用相应的库来导入模型和动画数据,更新骨骼变换矩阵,并绘制模型。你还需要根据具体需求,添加交互式的键盘事件处理。 ### 回答3: 使用QT渲染3D模型并播放骨骼动画可以在QT中使用OpenGL框架来实现。下面是一个简化的示例代码: 首先,在QT项目中添加OpenGL模块的依赖,可以在.pro文件中加入以下语句来引入相关库: ``` QT += opengl ``` 然后,创建一个继承自QOpenGLWidget的自定义窗口类,例如命名为MyOpenGLWidget,用于显示和渲染3D模型: ```cpp class MyOpenGLWidget : public QOpenGLWidget { public: MyOpenGLWidget(QWidget *parent = nullptr) : QOpenGLWidget(parent) {} protected: // 初始化OpenGL环境 void initializeGL() override { // 初始化OpenGL函数 initializeOpenGLFunctions(); // 设置背景颜色 glClearColor(0.0f, 0.0f, 0.0f, 1.0f); // 启用深度测试 glEnable(GL_DEPTH_TEST); // 设置模型视图矩阵 glMatrixMode(GL_MODELVIEW); glLoadIdentity(); } // 渲染3D模型及骨骼动画 void paintGL() override { // 清除颜色和深度缓冲区 glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); // 设置投影矩阵 glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluPerspective(45.0f, (GLfloat)width() / (GLfloat)height(), 0.1f, 100.0f); // 设置模型视图矩阵 glMatrixMode(GL_MODELVIEW); glLoadIdentity(); gluLookAt(0.0f, 0.0f, 10.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, 0.0f); // 绘制3D模型和应用骨骼动画 drawModel(); animateSkeleton(); // 刷新显示 update(); } // 绘制3D模型 void drawModel() { // 实现绘制3D模型的代码 } // 应用骨骼动画 void animateSkeleton() { // 实现播放骨骼动画的代码 } }; ``` 最后,将自定义的窗口类实例化并显示出来,例如在项目的主窗口类中: ```cpp int main(int argc, char *argv[]) { QApplication a(argc, argv); MyOpenGLWidget w; w.show(); return a.exec(); } ``` 通过编写绘制3D模型和应用骨骼动画的代码,可以实现在QT中渲染3D模型并播放骨骼动画的效果。上述代码只是一个简化的示例,实际应用中需要根据具体的模型和动画格式来编写相应的代码。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值