Archive for the ‘Coding’ Category

Swing绘制渐变按钮

昨天从图书馆借了一本《Java动画、图形和极富客户端效果开发》,作者为Sun公司的Java SE组客户端架构师,看了几页感觉获益匪浅。内容涉及Swing的渲染原理,一些图像的滤镜实现算法(例如方框模糊和高斯模糊),以及特效(比如类似OSX的倒影风格)的原理,都十分有意义,对接下来的图形研究很有帮助,若能精读此书,相信都可以写一个简单的图像处理软件出来了。

尝试了里面提到一个十分简单的渐变按钮,效果不错,代码如下:

Read the rest of this entry >>

PHP自动加载class文件的方案

PHP5中有一个很方便的__autoload的魔术函数,PHP Manual中的示例如下:

function __autoload($class_name) {
    require_once $class_name . '.php';
}
 
$obj  = new MyClass1();
$obj2 = new MyClass2();

算是很方便的一个函数,然而有一个缺陷就是没有名称空间,大量的class不得不放在一个目录下面,才可以用这个自动加载php的魔术函数,如果class文件要放在不同的目录里面,这个自动载入就无能为力了。为了解决这个问题,自己写了一个loadClass函数实现类似功能,代码如下:

function loadClass($tgt){
	$class = substr($tgt, strrpos($tgt, '.')+1);
	require_once(DIR_APP.str_replace('.','/',$tgt).'.php');
	return new $class();
}
 
$test = loadClass("model.test");
$test->myfunc();

DIR_APP/model/test.php:

class test{
	function myfunc(){
		echo "hello, world!~";
	}
}

如此一来,就可以方便的加载在不同的目录里面的(缺点就是要打完整的”名称空间”),并且应该在PHP4中也可以使用(虽然PHP5已经是大流)……

补充@2009-02-23 22:42

就此自动载入的问题咨询了一下某飞,给了两个采用spl_autoload的自动载入的实现(by flying~):

function loader($className) {
    $classPath = str_replace('_', DIRECTORY_SEPARATOR, $className);
    require $classPath . '.php';
}
 
spl_autoload_register('loader');
 
$user = new Model_User();
// load (inlcude paths):/Model/User.php

class的名称定义遵循PEAR标准用下划线_进行分隔
更加复杂点的支持多路径的”豪华版”(by flying~):
Read the rest of this entry >>

守望 UNIX 时间戳 1234567890

clock

嘛,那么上图与内容无关……只是随便找了个看上去还不错的时钟图 XD

于是~已经开始运作了39年的Unix时间将要在近期迎来一个特别的数字,也就是1234567890,因为其对应的UTC时间正好是星期五十三号,所以某geeker用调侃性的语言写了文章提了一下这个时刻,随后在slashdot上也有人提交了此文章(当然solidot也之后跟进了),至于cnbeta的编辑,则是很脑残的以为又是一个Y2K问题……随后豆瓣上又有人发起了守望UNIX时间戳1234567890的活动,所以作为一个勉强自称的geeker,咱自然也要来参一脚,花了半个小时写了这个倒计时:

http://vifix.cn/atelier/1234567890/

以下是科普~

Wikipedia:
UNIX时间,或称POSIX时间是UNIX或类UNIX系统使用的时间表示方式:从协调世界时1970年1月1日0时0分0秒起至现在的总秒数,不包括闰秒。

jMonkey Engine

jme-logo

今天仍然继续的在寻找Java的3D开发相关的物体的时候发现的好东西:

jME(jMonkey Engine)是一个高性能开源的Java 3D引擎,主要是为了填补Java这方面的空白而设计,通过使用一个抽象层,jME支持任意的绘制系统。目前支持LWJGL,JOGL的支持也将在近期加入。BSD证书,几乎是完全自由的使用。

Java平台下可以选择的3D图形API有很多,根据封装层次可以将其分为以下两种:

  • Java bindings to OpenGL
  • Scene graph APIs

其中属于Java bindings to OpenGL的有:GL4JavaLWJGLJOGL等。
属于Sence Graph APIs的有:JMonkey Engine(JME)、Sun官方的Java 3D等。

JME和Java 3D具有类似的场景结构,开发者必须以树状方式组织自己的场景。JME有一套很好的优化机制,这使得它得运行速度要比Java 3D快很多。JME主要由Render系统、Material系统、GUI系统、Texture和图片解码器、文件解码器、Scene插件(主要是地形系统)、粒子系统、日志、物理系统、光照系统等构成。可以说JME是一个功能齐全,性能卓越的3D图形引擎。

从特性看来,JME比Java 3D丰富得多(虽然也有我个人对Java 3D的了解不够深入的原因),再加上有更好的性能,接下去的3D研究应该会放弃Java 3D而转移到这个JME上面来。内建的特效和粒子系统也可以直接用,而不是整那个证书不太方便的Genesis FX了。

Read the rest of this entry >>

Java3D粒子系统和特效系统——Genesis FX

genesisfx

在搜索Java3D的天空实现方案时发现的东西,很可惜,并不是开放源代码的产物,不过有免费的个人版(但是不能对Genesis FX二次发布的License还是很困扰的)。

不过不管怎样,第一感还是挺不错的,没有几行代码就可以实现云雾,火焰,血迹等之前我根本不知道该怎么动手才好的特效。看其自带的Example貌似碰撞检测之类的也都包含在里面了。

不过因为Java 3D本身就很冷门的原因,这个东西的中文资料可以说完全没有,看来接下去是一个慢慢啃文档的过程。

Genesis FX官方网站

FlyingGuns —— 一个运用了Genesis Fx的二次开发框架,本身貌似也已经可以玩了的样子。(话说许可证的问题呢,被无视了么…… orz)

曾经将自己出卖给撒旦,现在皈依基督,又对人文主义有浓厚兴趣的某只?

好吧,标题其实说的是我自己 – v -

为什么这么说?见内文转载吧……

那么其实我觉得自己的想法应该更加接近不可知论 – v -

Read the rest of this entry >>

Hello, Universe

java3d

考试间歇期ing~这诡异的考试安排真让人无语,考4天,然后4天无事,最后再考1天,逼着别人不得不晚回家 orz

于是趁着这诡异的间歇时间开始Java3D的研究的第一步,以上就是今天成果了,嘛,还十分破烂,慢慢继续了

争取年内出同人空战游戏吧!!!

(那么模型是以前做的歼十……)

Read the rest of this entry >>

Ajax Animator

ajax-animator

http://antimatter15.110mb.com/ajaxanimator

某飞扔来的链接……

一开始还以为是又一个extjs写的GUI Builder,所以并没有太在意,然后才发现原来根本不是什么GUI Builder而是一个类似于Flash的物质,顿时惊到了 -v-

(当然,以Javascript的局限,要完全的实现一个Flash还是有点困难的)

该物尚处在初期开发阶段,期待其后续的发展……

Python的switch…case语法

Python没有switch…case的语法,不过可以用Dictionary和lambda匿名函数的特性来写出同样优雅的代码,比如这段javascript代码:

switch(value){
    case 1:
        func1();
        break;
    case 2:
        func2();
        break;
    case 3:
        func3();
        break;
}

等价的Python代码:

{
  1: lambda: func1,
  2: lambda: func2,
  3: lambda: func3
}[value]()

Read the rest of this entry >>

Say “goodbye” to alert()

blackbird

昨天发现的好东西——Blackbird,Javascript用的调试输出用控制台,漂亮并且易于使用,并且甚至支持键盘操作,官网的介绍词就是Say “hello” to Blackbird and “goodbye” to alert()

支持浏览器如下:

  • Internet Explorer 6+
  • Firefox 2+
  • Safari 2+
  • Opera 9.5

官方网站:http://www.gscottolson.com/blackbirdjs/

Page 2 of 3123