Swing绘制渐变按钮
昨天从图书馆借了一本《Java动画、图形和极富客户端效果开发》,作者为Sun公司的Java SE组客户端架构师,看了几页感觉获益匪浅。内容涉及Swing的渲染原理,一些图像的滤镜实现算法(例如方框模糊和高斯模糊),以及特效(比如类似OSX的倒影风格)的原理,都十分有意义,对接下来的图形研究很有帮助,若能精读此书,相信都可以写一个简单的图像处理软件出来了。
尝试了里面提到一个十分简单的渐变按钮,效果不错,代码如下:
昨天从图书馆借了一本《Java动画、图形和极富客户端效果开发》,作者为Sun公司的Java SE组客户端架构师,看了几页感觉获益匪浅。内容涉及Swing的渲染原理,一些图像的滤镜实现算法(例如方框模糊和高斯模糊),以及特效(比如类似OSX的倒影风格)的原理,都十分有意义,对接下来的图形研究很有帮助,若能精读此书,相信都可以写一个简单的图像处理软件出来了。
尝试了里面提到一个十分简单的渐变按钮,效果不错,代码如下:
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已经是大流)……
就此自动载入的问题咨询了一下某飞,给了两个采用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 >>
嘛,那么上图与内容无关……只是随便找了个看上去还不错的时钟图 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秒起至现在的总秒数,不包括闰秒。

今天仍然继续的在寻找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的有:GL4Java,LWJGL,JOGL等。
属于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了。
在搜索Java3D的天空实现方案时发现的东西,很可惜,并不是开放源代码的产物,不过有免费的个人版(但是不能对Genesis FX二次发布的License还是很困扰的)。
不过不管怎样,第一感还是挺不错的,没有几行代码就可以实现云雾,火焰,血迹等之前我根本不知道该怎么动手才好的特效。看其自带的Example貌似碰撞检测之类的也都包含在里面了。
不过因为Java 3D本身就很冷门的原因,这个东西的中文资料可以说完全没有,看来接下去是一个慢慢啃文档的过程。
FlyingGuns —— 一个运用了Genesis Fx的二次开发框架,本身貌似也已经可以玩了的样子。(话说许可证的问题呢,被无视了么…… orz)
考试间歇期ing~这诡异的考试安排真让人无语,考4天,然后4天无事,最后再考1天,逼着别人不得不晚回家 orz
于是趁着这诡异的间歇时间开始Java3D的研究的第一步,以上就是今天成果了,嘛,还十分破烂,慢慢继续了
争取年内出同人空战游戏吧!!!
(那么模型是以前做的歼十……)
http://antimatter15.110mb.com/ajaxanimator
某飞扔来的链接……
一开始还以为是又一个extjs写的GUI Builder,所以并没有太在意,然后才发现原来根本不是什么GUI Builder而是一个类似于Flash的物质,顿时惊到了 -v-
(当然,以Javascript的局限,要完全的实现一个Flash还是有点困难的)
该物尚处在初期开发阶段,期待其后续的发展……
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]()
昨天发现的好东西——Blackbird,Javascript用的调试输出用控制台,漂亮并且易于使用,并且甚至支持键盘操作,官网的介绍词就是Say “hello” to Blackbird and “goodbye” to alert()
支持浏览器如下: