人生如梦游戏间,RPG游戏开源开发讲座(JAVA篇)[6]——走马观花
2013-06-20 21:04
453 查看
在游戏中通常不可能允许一幅场景贯穿始终,这就提出了场景变更的要求,基于这一要求的实现,我们将进行如下效果的Java代码实现。
[b][b][b][b]下载地址http://www.3adisk.com/?onlinezero[文件名:RpgChair0to6.rar][/b][/b][/b][/b]
或另存以下X(gif)文件为rar
由于代码量已开始增加,由本回开始仅给出部分代码实现,详细请进行下载:
在本例中,本人采取的位图偏移算法如下:
MyPanle中实现如下:
// X偏移位置
int offsetX = MyPanel.WIDTH / 2 -role.getX()
* CS;
//计算X偏移量
offsetX = Math.min(offsetX, 0);
offsetX = Math.max(offsetX, MyPanel.WIDTH - GameMap.WIDTH);
// Y偏移位置
int offsetY = MyPanel.HEIGHT / 2 -role.getY()
* CS;
//计算Y偏移量
offsetY = Math.min(offsetY, 0);
offsetY = Math.max(offsetY, MyPanel.HEIGHT - GameMap.HEIGHT);
//System.out.print(role.getX()+":"+role.getY());
//绘制可偏移位置的地图
map.draw(g, offsetX, offsetY);
//绘制可偏移位置的角色
role.draw(g, offsetX, offsetY);
在GameHandle及GameMap中,均需注入offsetX及offsetY值,以生成对应图像。
GameHandle实现:
//自Example6开始,为了实现背景的移动,所有算法都要加入偏移值
publicvoid draw(Graphics g,int
offsetX,int offsetY) {
//以count作为图像的偏移数值,并于Example4中添加direction以获取所处图像块位置
g.drawImage(image,x *CS
+ offsetX,y *CS + offsetY,x *CS
+ offsetX +CS,y *
CS + offsetY +CS,
count *CS,direction
* CS,CS +count *
CS,direction *CS +
CS,panel);
}
GameMap实现:
//修正Example6中绘制方式,引入地图坐标偏移计算
publicvoid draw(Graphics g,int
offsetX,int offsetY) {
int firstTileX =pixelsToTiles(-offsetX);
//变更X坐标
int lastTileX = firstTileX +pixelsToTiles(MyPanel.WIDTH)
+ 1;
//返回最小X偏移值
lastTileX = Math.min(lastTileX,COL);
int firstTileY =pixelsToTiles(-offsetY);
//变更Y坐标
int lastTileY = firstTileY +pixelsToTiles(MyPanel.HEIGHT)
+ 1;
//返回最小Y偏移值
lastTileY = Math.min(lastTileY,ROW);
//在Java或任何游戏开发中,算法都是最重要的一步,本例尽使用
//简单的双层for循环进行地图描绘,
for (int i = firstTileY; i < lastTileY;
i++) {
for (int j = firstTileX;
j < lastTileX; j++) {
// switch作为java中的转换器,用于执行和()中数值相等
//的case操作。请注意,在case操作中如果不以break退出
//执行;switch函数将持续运算到最后一个case为止。
switch (map[i][j])
{
case 0 ://地板
g.drawImage(floorImage,tilesToPixels(j) + offsetX,tilesToPixels(i) + offsetY,
panel);
break;
case 1 ://墙壁
g.drawImage(wallImage,tilesToPixels(j) + offsetX,tilesToPixels(i) + offsetY,
panel);
break;
}
}
}
}
[b][b][b][b]下载地址http://www.3adisk.com/?onlinezero[文件名:RpgChair0to6.rar][/b][/b][/b][/b]
或另存以下X(gif)文件为rar
由于代码量已开始增加,由本回开始仅给出部分代码实现,详细请进行下载:
在本例中,本人采取的位图偏移算法如下:
MyPanle中实现如下:
// X偏移位置
int offsetX = MyPanel.WIDTH / 2 -role.getX()
* CS;
//计算X偏移量
offsetX = Math.min(offsetX, 0);
offsetX = Math.max(offsetX, MyPanel.WIDTH - GameMap.WIDTH);
// Y偏移位置
int offsetY = MyPanel.HEIGHT / 2 -role.getY()
* CS;
//计算Y偏移量
offsetY = Math.min(offsetY, 0);
offsetY = Math.max(offsetY, MyPanel.HEIGHT - GameMap.HEIGHT);
//System.out.print(role.getX()+":"+role.getY());
//绘制可偏移位置的地图
map.draw(g, offsetX, offsetY);
//绘制可偏移位置的角色
role.draw(g, offsetX, offsetY);
在GameHandle及GameMap中,均需注入offsetX及offsetY值,以生成对应图像。
GameHandle实现:
//自Example6开始,为了实现背景的移动,所有算法都要加入偏移值
publicvoid draw(Graphics g,int
offsetX,int offsetY) {
//以count作为图像的偏移数值,并于Example4中添加direction以获取所处图像块位置
g.drawImage(image,x *CS
+ offsetX,y *CS + offsetY,x *CS
+ offsetX +CS,y *
CS + offsetY +CS,
count *CS,direction
* CS,CS +count *
CS,direction *CS +
CS,panel);
}
GameMap实现:
//修正Example6中绘制方式,引入地图坐标偏移计算
publicvoid draw(Graphics g,int
offsetX,int offsetY) {
int firstTileX =pixelsToTiles(-offsetX);
//变更X坐标
int lastTileX = firstTileX +pixelsToTiles(MyPanel.WIDTH)
+ 1;
//返回最小X偏移值
lastTileX = Math.min(lastTileX,COL);
int firstTileY =pixelsToTiles(-offsetY);
//变更Y坐标
int lastTileY = firstTileY +pixelsToTiles(MyPanel.HEIGHT)
+ 1;
//返回最小Y偏移值
lastTileY = Math.min(lastTileY,ROW);
//在Java或任何游戏开发中,算法都是最重要的一步,本例尽使用
//简单的双层for循环进行地图描绘,
for (int i = firstTileY; i < lastTileY;
i++) {
for (int j = firstTileX;
j < lastTileX; j++) {
// switch作为java中的转换器,用于执行和()中数值相等
//的case操作。请注意,在case操作中如果不以break退出
//执行;switch函数将持续运算到最后一个case为止。
switch (map[i][j])
{
case 0 ://地板
g.drawImage(floorImage,tilesToPixels(j) + offsetX,tilesToPixels(i) + offsetY,
panel);
break;
case 1 ://墙壁
g.drawImage(wallImage,tilesToPixels(j) + offsetX,tilesToPixels(i) + offsetY,
panel);
break;
}
}
}
}
相关文章推荐
- 人生如梦游戏间,RPG游戏开源开发讲座(JAVA篇)[6]——走马观花
- 人生如梦游戏间,RPG游戏开源开发讲座(JAVA篇)[6]——走马观花
- 人生如梦游戏间,RPG游戏开源开发讲座(JAVA篇)[6]——走马观花
- 人生如梦游戏间,RPG游戏开源开发讲座(JAVA篇)[4]——一步莲华
- 人生如梦游戏间,RPG游戏开源开发讲座(JAVA篇)[5]——一树双花
- 人生如梦游戏间,RPG游戏开源开发讲座(JAVA篇)[1]——风云初现
- 人生如梦游戏间,RPG游戏开源开发讲座(JAVA篇)[2]——踏破红尘
- 人生如梦游戏间,RPG游戏开源开发讲座(JAVA篇)[4]——一步莲华
- 人生如梦游戏间,RPG游戏开源开发讲座(JAVA篇)[5]——一树双花
- 人生如梦游戏间,RPG游戏开源开发讲座(JAVA篇)[2]——踏破红尘
- 人生如梦游戏间,RPG游戏开源开发讲座(JAVA篇)[4]——一步莲华
- 人生如梦游戏间,RPG游戏开源开发讲座(JAVA篇)[2]——踏破红尘
- 【转】人生如梦游戏间,RPG游戏开源开发讲座(JAVA篇)[0]——月晕础润
- 人生如梦游戏间,RPG游戏开源开发讲座(JAVA篇)[3]——邯郸学步
- 人生如梦游戏间,RPG游戏开源开发讲座(JAVA篇)[3]——邯郸学步
- 【转】人生如梦游戏间,RPG游戏开源开发讲座(JAVA篇)[4]——一步莲华
- 人生如梦游戏间,RPG游戏开源开发讲座(JAVA篇)[3]——邯郸学步
- 人生如梦游戏间,RPG游戏开源开发讲座(JAVA篇)[0]——月晕础润
- 人生如梦游戏间,RPG游戏开源开发讲座(JAVA篇)[0]——月晕础润
- 人生如梦游戏间,RPG游戏开源开发讲座(JAVA篇)[1]——风云初现