使用GameCanvas制作星空效果
2008-01-05 08:54:08 来源:WEB开发网 GameCanvas是Canvas的子类,因此他同样继续了Canvas类的一些特性,比如showNotify()方法会在Canvas被显示在屏幕的时候调用,而hideNotify()会在Canvas离开屏幕的时候被调用。我们可以把他们当作监听器来使用,用于初始化和销毁资源。比如
// When the canvas is shown, start a thread to
// run the game loop.
PRotected void showNotify()
{
random = new Random();
thread = new Thread(this);
thread.start();
}
// When the game canvas is hidden, stop the thread.
protected void hideNotify()
{
thread = null;
}
在游戏开发中最重要的就是接受用户触发的事件然后重新绘制屏幕,通常我们使用getKeyStates()方法判定哪个键被按下了,然后绘制屏幕,调用flushGraphics()。在GameCanvas中,系统事实上已经为我们实现了双缓冲技术,因此每次我们绘制的时候就是在off-screen上绘制的。结束后通过flushGraphics把它复制到屏幕上去。下面是典型的接受事件、处理逻辑、绘制屏幕的代码。
// Get the Graphics object for the off-screen buffer
Graphics g = getGraphics();
while (true) {
// Check user input and update positions if necessary
int keyState = getKeyStates();
if ((keyState & LEFT_PRESSED) != 0) {
sprite.move(-1, 0);
}
else if ((keyState & RIGHT_PRESSED) != 0) {
sprite.move(1, 0);
}
// Clear the background to white
g.setColor(0xFFFFFF);
g.fillRect(0,0,getWidth(), getHeight());
// Draw the Sprite
sprite.paint(g);
// Flush the off-screen buffer
flushGraphics();
}
下面开始实现我们滚动星空的效果,其实设计的思想非常简单。我们启动一个线程,使用copyArea()方法把屏幕的内容往下复制一个像素的距离。然后绘画第一个空白的直线,随机的在直线上绘画点儿,这样看起来就像星空一样了。逻辑代码如下:
// The game loop.
public void run()
{
int w = getWidth();
int h = getHeight() - 1;
while (thread == Thread.currentThread())
{
// Increment or decrement the scrolling interval
// based on key presses
int state = getKeyStates();
Tags:使用 GameCanvas 制作
编辑录入:爽爽 [复制链接] [打 印]- ››使用脚本恢复WinXP系统的用户登录密码
- ››制作Win 7封装的自动应答文件经验
- ››制作一个优秀的网站 它应该注意哪几点
- ››使用phpMyadmin创建数据库及独立数据库帐号
- ››使用Zend Framework框架中的Zend_Mail模块发送邮件...
- ››制作一款百度空间的模版,装扮空间时搜“关闭”可...
- ››使用cout标准输出如何控制小数点后位数
- ››使用nofollow标签做SEO的技巧
- ››制作iPhone的SOAP应用的详细教程
- ››使用 WebSphere Message Broker 的 WebSphere Tra...
- ››使用SQL Server事件探查器做应用程序的性能分析
- ››使用SQL Server事件探查器分析死锁原因
更多精彩
赞助商链接