- 浏览: 18711 次
- 性别:
- 来自: 济南
最新评论
-
kinganpo:
...
java 游戏编程 (一) -
scx0237:
GameCore 这个类在哪里呀
java 游戏编程 (六) -
czpsailer:
支持楼主的研究精神!
java 游戏编程 (八) -
IcedCoffee:
喜欢楼主这种精神!我支持你!
java 游戏编程 (八) -
dourokinga:
楼主,这些应该是你看David Brackeen 的 Deve ...
java 游戏编程 (九)
文章列表
这篇主要说纹理贴图问题
纹理中的像素为图素 texeture element 纹理是根据镜头与多边形的距离缩放,图素也会缩放。
将每个像素贴图一个图素,就可以贴图。就是说读取一个图,获取这个图的每个点的像素,然后贴到视图窗口的每个像素。
计算方法:
纹理贴图的计算方程
x=U·(P-0) Y=V·(P-0)
视图窗口中的一个点在多边形上的具体点P
z/x=pz/px 顶点用W表示的话,W=(d/pz)/p
要找到点P,就要找到PZ,平面的发现N和平面上的直线是正交
N·(P-0)=0
N·0=N·P
推导过程我就不写了
最后
x=(-v*w·0)/(u*v·w)
用类描述纹理,纹理是 ...
- 2009-06-20 02:12
- 浏览 1278
- 评论(0)
本篇主要对java处理三维图形基本的知识做一下复习。有些地方上篇没仔细讨论。
涉及到上一篇的所有类,做一下规整,还有新的类应用描述。
1.Vector3D
这个类描述三维向量。三维向量就是(x,y,z)一个空间点,或从(0,0,0)到(x,y,z)的 ...
java3d设计的知识面比较多,常见的三维绘制有多边形造型和光束跟踪。
多边形造型(polygon modeling):将虚拟三维时间看做平面多边形。
光束跟踪(ray tracing):建立光束模型,简历眼到光源的模型。
java中常见的利用三维加速卡方法:Java3D和OpenGL关联。
Java3D核心是用OpenGL或DirectX绘制
现在我们用轻量级三维多边形绘制器,暂不用Java3D api
需要数学方面知识,但都很浅。
先考虑一个案例:我们构造一个四边形,然后它可以任意围绕x轴或y轴旋转,并且可以放大缩小。当然也可以围绕Z轴,只不过这样感觉不到3D效果。
解释一下这里的x,y,z ...
现在开始配置键盘
既然要配置键盘,就要使用到swing组件。比如按钮JButton b = new JButton("确定");
在swing绘制组件时,swing会在AWT事件派生线程中进行所有的绘制工作,当组件改变外观时,组件会调用repaint方法请求重画。按下按钮,动画循环中的下次绘图会改变外观。解决这个问题,就要捕获重画请求,并将其忽略。重画请求是发送到RepaintManager对象,我们可以开发一个类NoRepaintManager覆盖原功能。
package com.jsheng.game.util;
import javax.swing.Repaint ...
现在来让Fly移动。上一节已经能够监听键盘。现在对监听键盘事件做进一步封装。
首先设计一个类:GameAction.主要处理所有的键盘与鼠标事件,能够保存事件,在需要的时候调出。并能够设置键贴图,键贴图在另一个类InputManager中实现。所谓键贴图就是将按下的键具备什么功能做一个映射。先来看GameAction:引用Brackeen。
package com.jsheng.game.util;
/**
* function: company: jsheng
*
* @author wanghn wanghaining9999@sina.com
*/
public ...
- 2009-06-16 02:13
- 浏览 1683
- 评论(1)
交互性
前面已经完成了全屏幕,全屏幕下的动画与全屏幕下的动画移动。下面来看交互性问题。用键盘控制Fly的移动。Fly类见上一篇。在这之前先写一个辅助类,CoreSupport。这个类主要完成显示设置和运动动画loop,在开发的类可以再这个类的基础之上,直接继承这个类。
/**
*
*/
package com.jsheng.game.util;
import java.awt.Color;
import java.awt.DisplayMode;
import java.awt.Font;
import java.awt.Graphics2D;
import jav ...
- 2009-06-16 01:26
- 浏览 1392
- 评论(0)
通过前面的总结,动画已经可以很好的运行了,现在要让动画动起来,这里说的动起来就是能让它运动,不是原地的动画,而是坐标发生的变化。也就是可以再屏幕上独立运动的图形。我们用Fly命名它。
Fly有两个特性,就是位置和速度。位置就是它当前在屏幕中的坐标,速度就是它的速率和运动方向。现在定义Fly这个类
/**
*
*/
package com.jsheng.game.util;
import java.awt.Image;
/**
* company: jsheng
* @author wanghn wanghaining9999@sina.com
*/ ...
- 2009-06-16 00:37
- 浏览 1249
- 评论(0)
上篇说到的动画,在显示上有个比较大的问题,动画在闪烁。这是因为程序不断直接绘制屏幕造成。避免闪烁,我们用双倍缓存。缓存区是绘图时使用的屏外内存。双缓存不是直接绘制屏幕,而是绘制到后缓存区然后复制到屏幕。
page flipping技术。跳过复制缓存区,直接把后缓存区变为显示缓存区。
以上这些情况用BufferStrategy类处理。Jframe,Window这些对象都有BufferStrategy。调用getBufferStrategy()方法。调用show方法显示绘图缓存区,当然之前要用createBufferStrategy()方法创建
如:
frame.createBufferSt ...
- 2009-06-16 00:17
- 浏览 1938
- 评论(0)
接下来继续说动画的制作。
我拿QQ的截图随便截了悠嘻猴里的一个小猴子的3个帧的动作,将他们循环播放来模拟一个动画。但图像截的很烂,谁能给提供个素材先谢谢了。
动画的原理:
其实就是一系列的图在迅速的东。动画中的图像叫帧,frame,每一帧有自己显示的时间,不一定相同,有的显示300毫秒,有的可能是100毫秒。
我们用Animation这么一个类来描述动画。
首先建立一个模拟每一帧动画的类AnimationFramepackage com.jsheng.game.util;
import java.awt.Image;
/** function:
* company: jsheng ...
- 2009-06-15 02:30
- 浏览 1552
- 评论(0)
看到最近基于java的游戏文章不少,写一段关于java游戏编程的基本知识。很多内容参考自David Brackeen 个人网址,作为笔记。今日开第一题,日后慢慢更新。有不得当的地方还请多包涵,我会努力改进。
首先说说java游戏编程的基础。 这次总结是基于awt swing java2D这些知识。废话不多说,先来第一部分。
1.全屏图形。
显示的硬件分 显卡和显示器。显卡的内存将存储屏幕上的内容,并且将内存中的内容在显示器上显示。显示器的屏幕用像素表示。一般是800*600/1280*1024之类。
另外还有位深度的概念。比如8,16,24,32位。
8是2的八次方 =216中颜色,以此类推。 ...