TankII 一点小更新

发现又很久没更新博客了。

用Box2D重写了TankII,然后绘制则用了AWT和类似于Page flipping的技术,在Windows上绘制看起来是挺流畅的。至于可能有点慢,并不是画面跟不上,而是我设的速度限制而已。这次的版本,虽然地图做的还是很次,但代码管理上应该有不少进步了。眼看就开学了,不知道还有多少时间会像现在这样慢慢地开发程序。不过,有期待的就会有收获。

快速按坐标分类的方法还是没找到,不过现在的绘制速度还可以,于是也没找别的方法来提高绘制速度了。有空还是得转向OpenGL,现在用的Java2D虽然也是跨平台,但是不一定得到很好的硬件加速。而且Android的开发似乎也会是OpenGL的。用OpenGL对于平台切换也简单点吧。

下载:http://www.box.com/s/17djfttkvrovpn05ognv 源码应该会在不久后也上传的,现在没整理好,就没上传了;大概也不是很多人会看……

今年回来,还是有点无奈。不过走到现在,其实有很多人帮助过我了,要知道感恩生活,才知道快乐。

Smile

上学期末的时候写的一个小程序,用于练习 Java2D 编程。我觉得图形编程还是挺有趣的。

记得学期末的时候,某人发短信过来说对编程还是没很多兴趣。嘿嘿,其实我觉得其实编程就不过是实现生活中的事情而已。于是写了这个小程序。希望见到这个小程序也会开心一下吧。

也应该说一下。版权不在我这里,我只是用 Java 参考 Xorg 中的 Xeye 示例程序、加入一些鼠标事件处理写的。

大家可以参考一下源码吧。虽然现在看回原来写的代码,我也觉得写得不是很好(思路不清晰,但代码不长)……需要注意的是,我使用了 JRE 7 的新特性,所以,必须在 JDK 7 下编译。
实际上是因为加入了这些语句:

frame.setShape(new  
	java.awt.geom.Ellipse2D.Double(
		0, 0, 
		frame.getWidth(), 
		frame.getHeight()));
try {
	frame.setOpacity(0.8f);
} catch(Exception ex) {
}

其实还有一些动态效果的。截图就不多发了。

嗯,其实我希望大家见到这个程序都会开心。

下载:http://www.boxcn.net/shared/il58j4fm96mkj6nj0s69

源码:http://www.boxcn.net/shared/umi549k2vjsir2lzc25a

TankII update 1.2.1

考虑到以前同学说过的按键问题,现在修正了一下。不过,要更准确地控制坦克的炮筒位置,就需要两副方向键。而现在 ASDW 和 方向键 (功能和ASDW一样)都用了,于是想到 VI 的键盘模式 HJKL 。

修改记录:

  • 更改键设定,H、J、K、L 控制坦克炮筒角度。

所以,现在是,举例来说,无论现在炮筒在什么方向,只要按了 H 那么就会沿最短的路径向左( J 对应“向下”、K 对应“向上”、L 对应“向右”)。

这个修改太小了。所以就只是更新一个小版本号吧。基本上就修改了 TankKeyListener 类。

下载地址:http://www.boxcn.net/shared/1v7lhfdfumj08sxoktsl (其实下载地址没怎么变,用了 box.net 的文件版本功能)

Log 2011.8.11

昨天在回顾 POJ 3349 的时候,想起了散列表(Hash Table)的数据结构。提醒了我在 TankII 的对象碰撞的时候应该处理的一些事情,对需要检测的对象先进行粗略的分类然后再继续判断,这样的话,对 TankII 设计里可以减少实际碰撞检测的时候。这需要的就是一个散列函数了。这个散列函数应该满足的是把几个顶点坐标处理成一个数,如果所有坦克都可以通过这个数判断粗略分出可能造成碰撞的坦克的话,游戏的刷新间隔应该可以缩减到更短,有利于其他额外的绘制处理。但这个散列函数也不是容易找的。也只是我的一个很原始的想法而已。而且,散列表应该是对应静态分类(储存的对象基本是确定的)的,而我所需要的是动态分类,也是一个难题,还在探索中……

现在总算是对数据结构有些初始的理解了。

还有就是对 Java2D 的一些不满,似乎 Java2D 中的结构都是静止的结构,没有考虑到这个对象用作动画的一部分?如 Rectangle2D 这样的对象,虽然提供了 getCenterX() getCenterY() 这样的方法,但对 Rectangle2D 内顶点的修改却很少涉及。但看 OpenJDK 中 Rectangle2D 的实现,其实是可以增加额外的修改图像的方法的。而且碰撞检测也是基于变量的,这样修改也不会造成性能的问题吧?只有一个不方便的 setRect(doulbe x, double y, double w, double h) 来进行整体修改。当然,也是一个解决办法。相比起 Pygame 的 Rect 类就差远了。

TankII 1.2 - "Big Map"

我承认版本号没什么用,仅仅用来标识一个新的版本而已。这次的更新是自#十天游戏设计#以来的一些小更新了。尽管对于我来说是大更新……

简介:

基于 Java2D 写的坦克小游戏。1.0 的源码可以在 http://www.box.net/shared/r6rusgtymqqn3aaja8tc 处下载。需要 JRE 6.0 以上运行(因为仅仅测试过 JRE 6.0 上的运行情况)。

Enjoy playing~ :-)

更新内容:

  • 增加大地图模式。呃,看不了全部地图,增加了一些未知的成分;
  • 机器人探测的一些修改,只有在当前可视情况下才会攻击玩家;
  • 玩家坦克的射击角度更精确。

嗯,更新内容基本上就是上面这些了。但这次更新似乎不够优化,游戏速度反而有点慢了……

下载:
http://www.boxcn.net/shared/1v7lhfdfumj08sxoktsl