Bill's profile这里是我博客的备份PhotosBlogLists Tools Help

Blog


    September 13

    准备换博客了

    已经很久没有来这个博客里面灌了。msn space现在改得太难看了,速度还超慢。所以我打算以后用blogger的博客了。billconan.blogspot.com这里。
    最近在家里憋着写建模程序,快要写好了,但是似乎耐性已经到了极限,一天一天变得越来越呆,脑子都懒得转。这次程序是大换血,已经写了两个月,改用c++和opengl实现了。界面用的wxwidget,我不喜欢。感觉现在的程序很不稳定,每次出问题都会慌
    贴些截图:
    Clayshop Screenshot
    Aug 25, 2006 - 3 Photos

    我的新博客,有时间来看看:
    February 05

    iCry

    there seems to be some changes with msn space, and someone just told me that the iSmile doesn't. sorry for that, it must have something to do with the edit area. unfortunately i don't have time to study the code recently. so, is there any one can help to figure the changes out?
    December 21

    Convert map files of half-life2

    i wrote a program today to convert the VBSP map files of half-life2 to obj files. i did this because i have a project concerning game engine, and i'll probably have to write a FPS game demo later. i don't wanna do all the cg stuff myself, so i decided to crack them from the incredible game half-life2. and these are how the results look like (simply rendered in 3d max):

    今天写了个小程序, 把半条命2的地图文件给转换成obj格式, 这样就可以在3d软件里面进行编辑了. 半条命2的地图做的很精细, 玩的时候可以感觉场景很大, 但是模型文件却相对很小. 地图文件里面的bsp树划分没我想象的细. 我以前以为场景中的每一个面都要拆开作为节点, 现在看来是一组场景作为一个节点. 另外就是划分场景的平面看来是人为指定的而不是自动选取和模型面平行的面. 半条命2的地图没有拿一个半圆形的模型作天空, 好像以前我拿hammer做cs地图的时候就是这样. 目前这段代码还没有和贴图关联, 再说吧.

     
     
     
    December 03

    写了个Space的欢乐表情插件iSmile

    iSmile, the emotion icon plugin for MSN Space!

    刚才写了一个没水准的script叫做MSN Space欢乐表情插件, 可以比较方便地添加表情, 下载地址:
    guys, i just made this little script which i call iSmile. it is an emotion icon plugin for MSN space that enables easy adding vivid icons to your space. here is the download link:
    http://www.billconan.vip.nease.net/emo/iSmile.zip

    使用方法如下:
    Usage:
    1, 首先下载, 然后复制iSmile.url到收藏夹中的链接中, 比如我的是 "C:\Documents and Settings\billconan\Favorites\链接".
    First, download the file and move the internet shortcut file iSmile.url to your "Favorites Link" folder, and in my case it is "C:\Documents and Settings\billconan\Favorites\Links".

    2, 然后就可以在ie浏览器中看到这个快捷方式了, 如图. 登陆你的Space, 在编辑帖子的页面点击这个快捷方式.
    and then the shortcut will show up in your browser(ie) as in the image. while in the "adding new entry" page, click it.

    3, 这时候会出现一个附加的菜单, 上面有很多表情图标, 点击就会自动添加到你的日志上了.
    an additional panel will appear with lots of icons, just click them, the icons will be added to your entry. ENJOY!

    转贴请注明出处, 谢谢合作^_^

    读取Nvidia Demo中的模型

    Nvidia同ATI的显卡之争我总是更支持前者, 原因之一就是Nvidia的商标和Demo的模型师是世界上最牛的角色动画大师 "Steven Giesler" -------- 最终幻想和动画版黑客帝国的模型师, 这里是他的个人主页. 所以说要是可以把显卡Demo中的模型抠出来的话真是意义重大. 我曾经也想过解析这种模型文件, 但是打开看了一下觉得非常乱, 摸不清头脑. 前段时间发现了一个法国的高手Julien Bilalte(sBibi)写了一个分析Demo模型文件的文章, 那篇文章不仅仅介绍了模型文件的结构, 还把他分析的整个过程都写的很清楚, 字里行间都能看出他经验十分丰富. 有时间一定要把那篇了不起的文章翻译一下. 看到那篇文章, 我实在是忍不住了, 就用c#写了一个程序, 可以把模型导出成obj格式的文件. 目前这个程序可以解析dusk和nalu的模型, 对于早期的模型和最近的模型还无法处理. 懒得再继续研究了, 就这么点耐性, 呵呵. 管它的, 反正最精华的模型已经解出来了.
    这个就是成果了, 是 Geforce 6800 Demo 中的那个nalu, 我在 3D Max 里面作了拼接和渲染. 找不到渲染器就用扫描线的凑合了一下(出于对Steven的尊重我不打算放出模型和程序):
    这个模型有些有意思的地方. 比如说它的眼睫毛是用模型一根一根来表现的, 是所有模型文件里面最大的一个, 不得不佩服影视级CG动画的细致程度和CG大师的耐心, 呵呵.
    有必要在这里介绍一些 Steven Giesler 的作品. 不一定是他一个人完成的, 做这些了不起作品的应该是一个团队. 以下是一些个人收藏:
    几乎无人不知的最终幻想, 这部叫好不叫座的影片让人们第一次看到CG是可以变得如此真实.
    动画版黑客帝国一开始的变态真实动画.
    Nvidia的精灵, 几乎成了Nvidia的象征. 最开始这个Demo大概是要展示即时渲染的皮肤效果.
    November 05

    11月5日阴

    又是很长时间没有贴东西了。前些天好不容易闲下来打算接着写我的那个cedar,但是又遇到一些不爽的技术问题,所以还在停工状态。
    很早就听说directx渲染物体的时候做了什么优化,也就是说最好把一个物体作为一个整体来渲染,这样的效率会高。至于其中的原理我记忆的不很准确,似乎是它可以把一个物体放到显存中,如果你的场景物体多了,就会频繁地把数据从内存往显存里面复制,这样会使得性能大大下降。前两天作了个测试,如果一个面一个面地渲染,仅仅60个面的时候画面就开始卡了,我的显卡是6600gt的。
    先前Johnny-Aya-Baiken就和我说过,directx渲染一个单独面的效率很差,和渲染一个整的物体差不多,现在看来确实是这样。
    directx的这个特性给cedar带来不少困难。因为cedar的数据结构和directx的不同,但又要用directx的数据结构来进行渲染,这样的话从我自己的数据结构生成directx的indexbuffer这个过程是个很大的难题。当然我已经实现了。只不过这个过程比较耗时,所以不可能在每次模型变化的时候都重新生成一遍indexbuffer。所以我想更加艺术一点的设计应该是把整个模型分成很多小的部分,这样的话更有利于控制,比如说cedar数据结构中的一个面(face)对应一个独立的indexbuffer。但是偏偏directx渲染多个indexbuffer的能力又这么差。难怪很多的建模工具都是用opengl作图形引擎的。当然也有用directx,比如3Dmax,不知道它是怎么做到的。另外没试过softimage,不知道用的是哪种。
    所以眼下只能考虑如何在我自己数据结构发生变化的时候只去修改相应indexbuffer中发生变化的部分。但是这也是个难题,因为indexbuffer就是个破数组,增加数据容易但是删除可就费劲了,更何况数组删除数据是很耗时间的。我倒是也有个歪着儿来解决这个,就是把删除的数组中的数据表示成0,0,0,很显然一个三角面如果都由第0号点组成的话它将不会被渲染出来,这样看上去就相当于删除了一个面,然后我再把这个删除位置的数组下标记录一下,下次如果新增加面的话,先把留下的这个窟窿补上。哎!要是真这么编可就费劲了。
    另一个烦人的问题就是如何实现原来设想的undo和redo,想想不难,但是数据太多了,到底什么是应该被记录的什么不是应该被记录的数据一直想不好。如果搞个大包围,排列组合这些东西实在是太可怕了。如果一切从简的话,性能又大打折扣了。想不好:(
     

    经常被别人问说我space顶端的图是怎么添加的(有时候看不见,那个图片的服务器不稳定),还有不少是老外,所以想在这里说明一下。其实那个是以前的一段代码,不过现在已经被屏蔽了。所以过两天如果那个日志被刷到后面的页,那幅图就消失了。原先是一个<div class="...">的标记,现在如果你再提交的话它会把class="..."这个自动去掉的,然后就失效了。我倒是也想过一些提交的办法,比如说写成<div cl<script></script>ass="...">。这样提交之后<script></script>会被当成非法的标记给屏蔽掉,刚好剩下我们需要的代码。但是微软明显比我想象的狡猾多了。
    有时候我觉得挺奇怪的,天下那么多的博客,个性化方面比space强的很多很多,但是大家还是喜欢用这个。也不是说大家喜欢它的这种统一的风格,傻瓜式的操作,因为还是很多人想方设法地hack它。这就好像吃不用剥壳的螃蟹不香一样,人总喜欢先有些限制,然后费些力气突破这些限制或者钻钻空子,然后才会觉得爽。对于我,space的魅力可能首先就是速度快,然后就是和msn整合在一起,每次更新都亮小星星,不用强迫别人来看。

    其实早知道的话当时应该留个心眼,另开个space添加这个image,然后在我这个space上不断引用那篇日志。不知道是否能够重复引用某个博客上的同一篇日志。

    hi guys, i've been asked a lot about the top image of my space, so i decide to write this special FAQ to give some explanation. well, it is a piece of html code, but does not work now. the msn space team banned it probably because the team does not want the msn mark and the advertisement to be masked by the random image. it is actually a <div class="..."> tag, but the class="..." part will be eliminated automatically as invalid which disabled the random image. i've thought of some way to enable the image such as submitting code like <div cl<script></script>ass="...">, and the <script></script> part will be removed as invalid code and leave the desired <div class="..."> code. however, those msn guys are definitely much more cunning than i ever predicted. my top image is gonna disappear, if the code is piled out someday.
    October 19

    小改了一下颜色

    很小的改动,也不是最近弄的。就是想让cedar看上去和我silo设置的一样。当然最终会允许用户自己选择喜欢的颜色。

    October 17

    设计模式和软件工程的困惑

    一直对设计模式和软件工程的东西没什么兴趣,总觉得这些东西太虚。我感觉设计软件的时候如果技术问题不明朗,类设计也就会不明朗。因为模块划分之类的东西是服务于具体的技术问题的,技术问题搞不清楚的情况下要如何设计呢。可是技术问题又是很贴近实际的。比如说理论上很行的通的算法真正实现之后很可能速度上达不到要求,这样的话不光是要改变技术,相应的设计也要改。所以要怎么设计才能够预先把所有的事情都规划好了再进行具体的代码编写呢?这是我一直想不通的问题。
     
    我觉得软件设计是很自然的东西,用现成的理论限制起来是不是有些太教条了。记得数据结构课程设计的时候,我的程序将界面和内核的部分划分开来,老师问我有没有看过设计模式。我没有。我觉得这种规划应该是很自然的,犯不着去依照什么书上的理论。曾经还看过一个程序员讲自己学习设计模式很长时间得到的最大收获就是这种界面和数据分离的设计。
     
    说白了,我感觉设计很多时候要服务具体的技术问题,但是设计的时候往往又解决不了技术问题。有考研的哥们问我读研是学软件工程好还是嵌入式系统好。我说要我选肯定是后者。他问为啥,我说嵌入式系统至少是一门实业,软件工程这个东西太虚了。好的软件要有好的设计但同时也要有好的技术。纯有设计不行,除非是开发数据库系统----千头万绪但是技术问题很简单。我感觉好软件还是要虚实结合,就好比很少有经济学家是大款一样,纯搞经济太虚了,空手套白狼。据我所知大款基本上都是搞实业的,什么卖快餐、家具、软件、猪饲料、开超市等等。
     
    今天突然想起写这些东西是因为最近在考虑怎么实现cedar的redo和undo功能,我最初的设想是先搞个命令行,然后记录每一条命令,redo的时候直接逆运算这些命令。但是我感觉有些东西没有逆运算。比如说焊接的操作,涉及到将很多点的平均值计算。但是已知平均值是无法逆推原来点的情况的。听说设计模式里有一种命令模式好像涉及到了redo和undo,看了半天,其实也就和我的命令行思想差不多,至于具体问题似乎还是无能为力。
     
    我知道写这些话会被别人笑,不过想不通就是想不通。所以先写在这里,哪天想通了再回头进行自我批判吧。恕我无知!
    August 10

    搞了个gre计时作文工具

    用了用pp3, 觉得很难用, 就自己写了这个. 不知道考场上的是不是也是这个样. 我模仿的就是北美范文前面附带的界面和pp3的样子.
     
    July 29

    Cedar的性能和灯光的进一步改进

    今天回来本来是要处理灯光的,gamedev上的人说我的顶点法线计算的不对。的确,我先前就是很潦草地给每个点一个法向量。改正后光照就正常了。在编法向量的时候,我发现每添加一个面都进行一次三角划分,这个本来是为建模的时候考虑的,但是载入文件的时候只用一次就行了,难怪以前模型一大性能就会出问题。现在真是太好了,大模型读取也没问题,甚至速度比silo还快呢!另外就是解决了内存消耗过大的问题,先前读取一个比较复杂的模型内存占用能达到288兆,现在一个非常复杂的模型也不过消耗33兆,同一个模型在silo中调用费了39兆内存。现在想起来,其实有时候内存耗太多不一定是数据存储的问题,其实现在的改进数据结构比以前的占用内存要大。但是以前的算法有问题,产生了内存leak的问题。其实已经不是第一次遇到了。
    性能的问题算是基本上解决了,这是现在的效果:
     

    Cedar 性能改进

    今天稍微改进了一下cedar的性能 现在已经可以读取复杂度高一点的模型文件了 但是仍然有限制 试了一个很大的文件还是在漫长等待之后出现了异常
     
    不过现在的性能算是基本可以忍受了 再想想还有没有改进的余地
    现在场景的灯光处理得比较差 应该先学习一下灯光的东西
     
     
    July 03

    Cedar小进展

    今天把Cedar的数据结构按照最初的设想写了个大概, 已经可以从外部读取sia文件了, 基本上实现了以前用trueVision3D写的那个版本的所有功能了. 只可惜现在的性能还有问题, 对场景的复杂度还有限制. 估计还是内存消耗太大了. 不知道怎么回事. 真是头疼的事啊. 打算先在这个的基础上实现了细分算法, 性能的问题之后再考虑.
     
    June 11

    Cedar Summer

    雪松的夏天
    决定报名参加google的summer code 2005活动 于是乎先前的什么gre单词连连看就先放放了
    决定以cedar去参加
    这是我写的一个模仿silo的3D建模工具 用c#语言来写 DirectX9作为图形引擎 最开始的版本不打算有什么特色 主要就是模仿Silo的功能
    这个选题对我来说有点难了 因为blender好像用了8年 而且是团队的作品 ppmodeller用了10年 是一个卢森堡的个人程序员的作品 而我的时间是背单词之余的一个夏天
    所以多半完不成 但是据说会有开源站点的帮助 所以我觉得还是一个很好的机会 cedar不是最近的突发奇想 实际上已经磨磨蹭蹭写了一些了
    想来还是有希望的 首先cedar只是个多边形建模工具 它的功能是silo功能的子集 代码量可能不会非常大 我估计一些专业的cg软件大部分的代码是渲染和动画部分的
    建模这个东西很奇妙 在一部完整的cg作品中 模型的分量至少占50% 但是操作模型的工具只占到cg工具的5%左右
    为什么要模仿silo呢? 我对silo的印象就是简洁 它的功能说不定是所有cg程序里最弱的 但是一些来自silo官方的作品仍然叫人惊奇 我对silo的评价就是 面向使用的cg环境 它隐藏了很多复杂的技术信息 将最有代表性的建模工具保留 这样可以让艺术家更多的关注到艺术创作上 而不是什么图形学的技术 silo几乎可以胜任所有的模型创作
    下面是初步规划的cedar开发任务队列
    1,研究blender代码 主要是研究一下数据结构和细分算法的东西
    2,写数据结构
    3,实现Catmull-Clark细分表面算法 要求能进行任意阶的细分和恢复 这要求数据结构要够强悍
    4,实现物体拾取 研究一下相关的代码
    5,实现拾取点 可以批量拾取
    6,实现拾取边
    7,实现挪动点
    8,实现旋转点集
    9,实现缩放点集
    10,实现挪动边
    11,实现转动边
    12,实现缩放边
    13,实现挪动物体
    14,实现转动物体
    15,实现缩放物体
    16,实现cut操作
    17,实现extrude操作
    18,实现weld操作
    19,实现生成基本物体
    20,实现添加参考图
    21,实现对称建模
    22,实现对sia文件支持
    23,实现对obj文件支持
    24,实现对3ds文件支持
    25,实现控制台
    26,实现redo和undo
    27,完善界面
    28,完善帮助文档
    29,cedar主页
    可能会比较复杂的阶段
    数据结构 细分算法 cut操作 redo和undo操作

    上面是昨天设计的logo 借用了一下本博客的背景图案

    June 05

    开始设计gre连连看

    页面刷新free web page hit counter

    今天开始着手设计那个gre单词连连看游戏了 时间不多 完全是作为调剂 其实我觉得gre单词不适合做成连连看 因为连连看游戏要求每一局只有少量的花色 但是面积比较大 而理想的单词游戏最好一组出现的单词量大一点 这些问题等写出来再说了

    今天先搞的界面和logo的设计 借着gta圣安的上市 我特意把界面设计成gta的风格 gre和gta很像不是吗 呵呵名字暂且定为 GRE Sucks

    这是logo

    这是主界面 其他的陆续补上

    May 29

    扁红球教程之一

    决定拿它写程序之前先研究一下文档 目前觉得有点简单 好像没有必要翻译似的 以后还是直接贴英文的吧
    Lesson 1:  FRB Template and the Sprite Class
    by Victor Chelaru
    第一课 扁红球模版和精灵类
    FRB Files
    扁红球文件说明
    The FRB Template is a starting point for beginners as well as most game projects.  It is made up of four different files:
    扁红球模版是新手和大多数游戏项目的起点 它是由4个不同的文件组成的
    GameData.cs
    GameMain.cs
    GuiData.cs
    GuiMessages.cs
    There are other files associated with the project, but the four mentioned above are the main four that are used when developing projects.  All of our lessons will be built in the GameData.cs file.  You will also be placing code in your own .cs files when you create your own classes.  It is common to create new objects that inherit from the Sprite class for the player, enemies, and any other Sprites with specific behavior.
    还有其它的文件会和一个游戏项目相关 但是上面提及的这些是最常用的 我们所有的教程都是在GameData.cs的文件里完成 你还要在自己定义的文件里加一些内容 传统的做法是继承精灵类来创建游戏里的主角 敌人和其他有特别行为的精灵

    GameData.cs
    To begin, open up the GameData.cs file (not to be confused with the GameMain.cs file).  For now, remember that there are three areas where you will be adding code, and each area has a distinct function.
    首先打开GameData文件 不要为GameMain文件迷惑了 现在要记住 有3个地方是加入代码的位置 每一处有独立的作用
     
    Declaration is generally done outside of any methods inside of the GameData class.  That is, when declaring objects, do so under the [reference to engine managers and data] block.
    Initialization (or instantiation) is done in the Initialize method under the [initialize engine managers and data] block.  This method is only called once at the beginning of execution.
    The Activity method is called once every frame.  Game logic should appear here.  Keep in mind that frame time is not constant, so don’t count on things occurring at set intervals when placing them here.  I will cover timing later.
    所有GameData的声明应该都在方法的外面声明 也就是说声明语句请放在 [reference to engine managers and data] 块中
    初始化的工作已经在Initialize的方法中完成了 它在 [initialize engine managers and data] 块中
    动态方法每一祯都会调用一次 游戏的逻辑都应该放在这个地方 要记住祯的时间不是恒定的 所以不要指望放在这里面的东西会恒定执行 我会在之后介绍时间的问题

    Before writing any code, I want to point out the Sprite and SpriteManager class.  The Sprite class is the most important class in the FRB Engine.  Sprites can be created through the new keyword, but this will only create a Sprite in memory.  The engine will not know about the Sprite and won’t manage and draw it.  Therefore, when you create a new Sprite, it should be done through the SpriteManager.
    在写任何代码的之前 我首先要介绍一下精灵和精灵管理器类 精灵类是最引擎重要的一个类 精灵可以通过新建一个keyword 但是这只不过在内存里建立了一个精灵 引擎不知道这个精灵的任何信息 也不会绘制和管理他们 因此 建立精灵需要精灵管理器类
     
    The SpriteManager manages numerous Sprite behaviors including movement, acceleration, fadeRate (fading in and out), attachment, and the ever-important drawing to name a few.  Therefore, we always want to instantiate Sprites through the SpriteManager.  To clear up terminology, declaration refers to merely naming a variable and assigning a type as follows:
    精灵管理器可以管理很多的精灵行为 包括移动 加速 淡入淡出的速率等 因此我们总是要通过精灵管理器来实现精灵类 说的明白点 就是如下

    Object myObject;
    Instantiation refers to actually “filling up” the variable as follows:
    实现引用
    myObject = new Object();

    Creating a Sprite

    Our GameData class automatically has a SpriteManager instance named sprMan.  Therefore, we can use this instance to create Sprites.  To create a Sprite, first declare a Sprite above our Initialize() method.  Second, instantiate the Sprite through the SpriteManager using the redball.bmp image.  Add the bold code so your file looks as follows:
    我们的GameData类自动地包含一个精灵管理器的实体叫做sprMan 因此我们可以利用这个实体建立精灵 要建立精灵首先在initialize()函数前声明精灵类对象 然后用redball.bmp初始化精灵管理器 加上粗体的代码 之后你的文档应该像这样
    .  .  .  .
    [reference to engine managers and data]
    Sprite myFirstSprite;
    public void Initialize()
    {
     [initialize engine managers and data]
     myFirstSprite = sprMan.AddSprite("redball.bmp");
    }
    .  .  .  .

    Let’s analyze what we are doing here.  The first bold line simply creates the myFirstSprite variable.  At this time, there is no Sprite in memory, and there are no Sprites that the SpriteManager is keeping track of.  We merely have an “empty” variable that we can use to store a reference to a Sprite.  In this and any other examples, code additions and modifications will be in bold.
    让我们分析一下我们现在做的东西第一行建立的是一个引用 并没有实体 没有在内存里开辟任何空间
     
    Our second line does quite a few things behind the scenes.  For simplicity’s sake, we will only worry about some of the most obvious behavior.  The sprMan instance of our SpriteManager is told to create a new Sprite using the graphical file redball.bmp.  Once the SpriteManager creates this Sprite, it holds on to it internally, but also gives us a reference that we store in myFirstSprite.
    第二行是实例化的过程 开辟空间 并且使用引用 让我们感觉好像在引用里也存储了一份精灵的实体
     
    If we rebuild the solution and run it, we will see the redball.bmp graphic sitting in the center of the screen.  Great, you’ve just created your first Sprite.
    现在如果重新编译运行一下会发现redball.bmp已经出现在屏幕正中了 我们已经创建了我们第一个精灵了

    有时间决定研究一下FlatRedBall

    FlatRedBall 2.5d Game Engine Forum Index有时间决定研究一下FlatRedBall 这个是我早就在GameDev上发现的一个用于.Net的2.5D引擎 但是后来连接让我丢掉了 刚才又从Google上把它找到 最近很想写个GRE单词连连看的游戏 主要是觉得GRE这种变态的考试 辛苦复习也未必会有结果 不如写个程序 让复习期间先留下点成果 自己从新写太麻烦了 不如先试试这个引擎 它的官方网站上已经给了一个不错的程序框架 我刚才已经调试通了 挺不错的 有时间一定要好好研究一下了 据我目前的观察 这个引擎好像是一个印第安纳州的程序员的个人作品

    May 27

    MSN Space进阶技巧-添加计数器和MSN在线状态指示器

    计数器和MSN在线状态指示器是两个比较实用的工具,通过前者你可以了解自己空间的受欢迎程度,而后者又为来访者提供了你目前的在线信息,方便好友与你及时联系。为日志加入这两项功能的前提是你必须已经安装了HTML语法扩展编辑工具,也就是你的IE浏览器工具栏里已经拥有了“Edit It”按钮。如何获取此项功能,我已经在教程的你一章作了详细介绍,这里不再赘述。

    先说说添加计数器。如果只是在日志中显示来访总数,那么申请一个简单的计数器即可,提供这种服务的网站很多,你在搜索引擎中键入“Free Web Counter”会查找到很多结果,这里我个人推荐http://www.amazingcounters.com/。这个网站提供350多种计数器,款式繁杂,花色多样,绝对满足你的需要。申请时需要注册,但过程很简单,一般只需要提供少量的个人信息即可。注册成功后你就可以选择心仪的计数器了,然后再输入你个人网站的信息,你将获得一段在线生成的HTML页面的代码。某些网站还会提供给你简单的在线编辑功能,让你进一步对计数器的外观作简单的修改,以更好的适合你的需要。将获取的代码拷贝,然后转到你需要插入计数器的MSN Space日志,点击“Edit It”按钮,进入HTML语法编辑状态,将刚才获取的代码粘贴到空白处,再退出HTML编辑状态,在日志文本处理模式下调整计数器的位置。由于MSN Space空间没有提供置顶功能,因此你必须经常调整计数器的位置,将它始终放置在首页的日志中(最好是第一篇日志)。方便起见,你可以将计数器的源代码拷贝到文本文件中,以后调整时将它简单粘贴过来就可以了。

    如果你想获得有关你的空间流量的具体信息,诸如单位时间内的访问量,来访者停留时间,来访者IP及所在国家等等众多专业统计结果,上述网站就不能满足你的需要了。推荐你到这个网站申请此项服务:http://www.statcounter.com/,它提供了极其强大且稳定可靠的统计功能,几乎面面俱到(至少对于我们这个水平是足够了),而且众多信息均以图形或表格的方式予以呈现,直观明了(Tucow五星推荐)。所有这些服务均为免费,除非你的月访问量超过20万。唯一的缺点就是提供的计数器样式过于简单,可供选择的余地也不大。。它的申请过程很简单,成功后会先让你选择计数器样式(你可以进行简单的定值),然后设定某些参数,诸如通过Cookie功能将你自己的登陆排除在统计数字之外等,之后你可以在Install Code页面获取HTML代码,需要注意的是,它会为不同类型的页面生成不同的代码,因此你要在“Statcounter Code Option”里选择“Html Only Code”,通过这个命令生成的代码才可用于MSN Space,获取代码后的操作就和上面已降解的方式一样了。由于是海外的服务商,所以页面信息全部是英文,这对于不谙E文的朋友可能有些麻烦。

    申请MSN在线状态指示器也很简单,到下面这个网站http://snind.gotdns.com:8080/ 在“Messenger”下拉菜单里选择MSN,当然如果你有Yahoo,或AOL等提供的及时通讯工具,也可以为其申请相应的指示器。输入你的MSN Messenger用户名,网站很快会为你生成一段代码,这段代码显示的是一个图标,通过其颜色的变化来显示你的Messenger的不同状态,直接将此代码按上述方法添加到日志中就可以了。有两个问题需要注意:该状态指示不会实时更新,它显示的状态是访问者登陆你的空间时你的在线状态,如果你在此期间上线或离线,指示器不会实时同步做出反应,除非刷新页面才会看出变化。另外显示的状态和真实状态可能会有稍许延迟,但不严重。还有一种情况也可能会发生,就是服务商的Server关机,那么指示器就无法正确显示任何状态了。

    MSN Space进阶技巧-如何添加视频

    我要我的日志有声有色,不少在MSN Space安家的朋友都有这个想法。毕竟“声情并茂”的页面会吸引不少关注。上一章里我们了解了如何加入背景音乐,接下来我们看看怎样在日志中放入视频片断。

    也是偶然的机会,我发现某些网站提供所谓的Music Video Code,选中自己需要的视频,再设定几个简单参数,网站就会即时为你生成一段代码,这段代码可用于自己的网页或Blog,从而实现实时播放的效果。当时我就产生了要在MSN Space中尝试的念头,但几经试验都不成功。后来我将一段视频拷贝到Dreamweaver网页编辑器中,查看了一下它的源代码,稍微做了一下修改,然后在IE中预览,再将预览页面里的视频加以复制,粘贴到日志里,没想到竟然成功了!不过这种做法比较繁琐,在此不再详述了。

    我要为大家介绍的是一种更为简便的方法,它的灵感也来自于背景音乐的语法格式。实际通过上一个教程大家就可以了解到,图片“属性设置”里的“视频源”选项起到了关键作用,那么既然它叫做“视频”源,我们又成功地用它实现了音乐的载入,那理所当然就可以加入视频了。本着这个思路,我将语法中的音乐文件改为 asf流媒体文件的链接,然后又调整了语法中IMG的宽度和高度,在Space的日志中一试即告成功,同时利用Loop参数也解决了以往不能循还播放的问题。

    看到这你会恍然大悟,原来这么简单!是啊,其实就是这么简单!所以,如何加入视频,就和上一章介绍的加入背景音乐一样可以通过两种方式实现,一是利用MS Frontpage,二是使用我提供给你的下面这段语法:

    <P><IMG height=150px width=150px loop=infinite dynsrc=流媒体文件链接></P>

    IMG后的Height和Width分别控制视频画面的高度和宽度,你可以根据需要自行调整,如果这里你都设置成0的话,那么就只有音乐看不到图像,这也等同于插入背景音乐的效果。Loop控制循环次数,用法可参见上一章的描述。

    对于页面中视频位置的控制,可以使用日志编辑器里简单命令,另外也可通过加入下述语法实现视频与文字的完美结合。举例如下:

    align=left 文字置于视频的右边,并与其紧密结合
    align=right文字置于视频的右边,并与其紧密结合
    align=top 文字队齐视频顶端
    align=middle 文字队齐视频中部
    align=bottom 文字队齐视频底端

    这里关键是流媒体文件的获取,正常的流媒体文件以asf,wmv,或mov等为后缀,这是最直接的形式;也有以asx为后缀的,这种文件格式隐藏了流媒体的真正地址,但没有关系,你一样可以将带有asx后缀的链接放到你的语法中。目前网上多数流媒体文件都隐藏了其链接,很难通过直接的方法来查看,有关这方面的破解技巧网上多有提供,大家可以试试。

    MSN Space进阶技巧-如何添加背景音乐

    如何在自己MSN Space的日志中加入音频和视频是目前许多朋友关注的问题,毕竟拥有声光效果的页面即能娱人也能悦己。记得刚入Space的时候,一方面为它的简单实用而折服,另一方面又为它提供的少得可怜的个性化设置而烦恼,初期只是简单地写写字,上传些照片,后来学会了贴图都觉得兴奋不已。看看其他Blog空间五彩缤纷的样子,真的是羡慕不已。Space留给我们的发挥空间就真的如此有限吗?事实当然并非如此,无论微软是有意还是无意,她仍然在这里给了我们展示个性的可能,只是这种可能要靠大家自己去发现。好了,废话少说,进入正题!


    先介绍如何添加音频,也就是为我们的日志加入背景音乐。目前Space上比较流行的做法是利用MS Frontpage,这对于手头没有该款网页编辑软件的朋友当然不是一个好消息。通过分析其语法格式,我发现了更为简便的办法,不需动用上述软件即可实现音频的加入。考虑到有些朋友对第一种方式可能也会感兴趣,因此一并将两种方法介绍如下:

    1. MS Frontpage方式

    首先在网上搜索你需要的音乐,这里推荐使用WMA格式的文件,因为它体积相对较小,因此会获得比较快的载入速度。你需要获取该文件的确切链接地址,格式形如:
    http://www.xxx.com/xxx.wma ,某些在线播放的音乐不会直接显示链接地址,如何获取之,请通过Google等搜索引擎查询相关技巧。当然最满意的是你自己拥有主页空间,这样你就可以把心仪的歌曲上传到那里,而且不用担心以后会出现因为链接失效而造成Space背景音乐无法载入的情况。有了链接地址后,运行MS Frontpage,新建一个文件,然后在页面中插入图片,图片建议越小越好。然后用鼠标右键单击该图片,选择“图片属性”,在弹出的对话框中选择“视频”选项,将刚刚获取的音频文件的链接粘贴到“视频源”一栏,然后设置“重复”选项中的“循环次数”,这里依你自己的喜好加以选择。“开始”选项中的设置不用管它,留空即可,最后点击“确定”。Frontpage会用一段时间获取你的视频源,时间长短依据你的音频文件的大小。这时你会发现原来插入的图片缩成了一个小图标,用鼠标右键单击它,然后点击“复制”。回到你的Space空间,新建一篇日志,或打开你想添加背景音乐的日志,将光标移至空白处,然后用 IE浏览器“编辑”菜单里的“粘贴”命令或CTRL+V快捷键,将你刚才复制的内容粘贴于此。正常的话,你不会看到任何粘贴的内容,再稍等一些时间,无须打开日志预览,你就可以听到背景音乐了。剩下的事,当然就是发布你的大作了。

    2. Loadmemory简单语法方式

    通过上述方法插入背景音乐,总的来说并不繁琐,但对于没有MS Frontpage以及对MS系列产品过敏的朋友该怎么解决这个问题呢。通过分析上述操作的源代码及语法格式,我发现了更为简便的方法,只需插入一个极简单的语法句子,就可快速实现背景音乐的加入。请大家记住下面这个语法:

    <P><IMG height=0 loop=infinite dynsrc=音频文件链接地址 width=0 border=0></P>

    此段语法中唯一需要你更改的就是Loop,它控制循环播放的次数,当为infinite时是无限循环,为0时是不循环,其他循环次数只需键入相应数字即可。

    在你的日志编辑页面,首先点击前文提到的“Edit It”按钮,进入HTML语法编辑模式,然后勾选Use HTML to Create Your Page,在空白处插入上述语法就可以了。由于需要载入时间,因此当你点击日志预览的时候,可能需要等待一会才能听到音乐。

    MSN Space进阶技巧-立体彩色边框

    拥有了背景色彩的日志显得生动活泼了许多,那么如何让她更具特色呢?在这一章里我将向大家讲述如何定制具有立体效果的背景样式。

    我们先从为日志文字添加带有色彩的边框说起,因为其涉及到的CSS边框属性语法是以后制作立体效果边框的基础形式。请记住下面这段语法:

    <div STYLE=\"border-style:solid;border-width:5pt; border-color:red\">日志文字</div>

    它会在你的文字外围生成一个红色边框,border-width控制边框的粗细,border-color调整边框的颜色,这里你仍然何以使用前文提到的形式如#xxxxxx的颜色数值,而border-style则控制边框的效果,当使用“solid”则为单一颜色的线形简单边框。

    接下来我们再将上述语法扩展一下,就可以获得具有立体效果的彩色边框。那么从何下手呢?其实就是在border-style后面使用不同的语法描述:

    Solid 简单线形边框 Double 简单双线边框 Groove 沟线立体效果边框 Ridge 脊线立体效果边框 Inset 嵌入线立体效果边框 Outset 浮出线立体效果边框

    你可以在MSN Space日志中尝试一下上面不同的语法,然后在预览中观看效果。

    通过定制边框的方法再将上一教程添加色彩的语法嵌套其中,你就可以创造出具有立体效果的彩色日志背景。

    例如:<div STYLE=\"border-style:outset;border-width:2pt; border-color: red\">
    <div style=\"width:100%;height:100%;background-color:#ffff00;\">日志文字
    </div></div>

    使用上述语法将会为你呈现一个黄底色红边框的浮出线效果背景,其实上述语法还有其他形式的简化写法,这里不再赘述,只采用上述较直接易理解形式。

    对于背景边框的四个边你也可以按自己的需要进行调整,以左边框为例,你可以使用下述语法:

    Border-left-style:solid (double, groove, ridge, inset, outset)定制边框样式
    Border-left-color: #xxxxxx定制边框颜色
    Border-left-width: xpt 定制边框粗细

    其他三个边框只要分别使用Right, Top, Bottom就可以了。将下面的语法放到你的日志中预览一下,看一看是什么效果:

    <div style= \"border-top-style:outset;border-right-style:outset;border-left-style:outset;
    border-bottom-style:outset;background-color:#cc3366\">

    你可以按照自己的想法随意调整四个边框的式样,以便创造与众不同的效果,记住一点,不同的属性描述之间用 ; 隔开。另外,你可能会注意到,当你设置完边框返回到日志文本编辑模式,在键入文字过程中如果使用回车键,就会又出现一个边框,从而影响文字的连贯性,这是因为HTML语法中不支持硬回车。要解决这个问题,必须返回到HTML编辑模式,在需要回车的地方键入<br>,需要几次回车就键入几个 <br>,然后再返回到文本编辑模式,你就会发现边框背景内已经为你加入了回车后的效果。