您的位置:首页 > 编程语言 > Java开发

人生如梦游戏间,RPG游戏开源开发讲座(JAVA篇)[6]——走马观花

2007-08-17 15:56 591 查看
在游戏中通常不可能允许一幅场景贯穿始终,这就提出了场景变更的要求,基于这一要求的实现,我们将进行如下效果的Java代码实现。
[align=left]
[/align]
[b][b][b][b]下载地址http://www.3adisk.com/?onlinezero[文件名:RpgChair0to6.rar][/b][/b][/b][/b]

或另存以下X(gif)文件为rar



[align=left]
[/align]



[align=left] [/align]
[align=left]由于代码量已开始增加,由本回开始仅给出部分代码实现,详细请进行下载:[/align]
[align=left] [/align]
[align=left]在本例中,本人采取的位图偏移算法如下:[/align]



[align=left] [/align]
[align=left]MyPanle中实现如下:[/align]
[align=left] [/align]
[align=left] [/align]
[align=left] // X偏移位置[/align]
[align=left] int offsetX = MyPanel.WIDTH / 2 - role.getX() * CS;[/align]
[align=left] //计算X偏移量[/align]
[align=left] offsetX = Math.min(offsetX, 0);[/align]
[align=left] offsetX = Math.max(offsetX, MyPanel.WIDTH - GameMap.WIDTH);[/align]
[align=left] [/align]
[align=left] // Y偏移位置[/align]
[align=left] int offsetY = MyPanel.HEIGHT / 2 - role.getY() * CS;[/align]
[align=left] //计算Y偏移量[/align]
[align=left] offsetY = Math.min(offsetY, 0);[/align]
[align=left] offsetY = Math.max(offsetY, MyPanel.HEIGHT - GameMap.HEIGHT);[/align]
[align=left] //System.out.print(role.getX()+":"+role.getY());[/align]
[align=left] //绘制可偏移位置的地图[/align]
[align=left] map.draw(g, offsetX, offsetY);[/align]
[align=left] [/align]
[align=left] //绘制可偏移位置的角色[/align]
[align=left] role.draw(g, offsetX, offsetY);[/align]
[align=left] [/align]
[align=left] [/align]
[align=left] [/align]
[align=left]在GameHandle及GameMap中,均需注入offsetX及offsetY值,以生成对应图像。[/align]
[align=left]GameHandle实现:[/align]
[align=left]//自Example6开始,为了实现背景的移动,所有算法都要加入偏移值[/align]
[align=left] public void draw(Graphics g, int offsetX, int offsetY) {[/align]
[align=left] //以count作为图像的偏移数值,并于Example4中添加direction以获取所处图像块位置[/align]
[align=left] g.drawImage(image, x * CS + offsetX, y * CS + offsetY, x * CS + offsetX + CS, y * CS + offsetY + CS,[/align]
[align=left] count * CS, direction * CS, CS + count * CS, direction * CS + CS, panel);[/align]
[align=left]}[/align]
[align=left] [/align]
[align=left]GameMap实现:[/align]
[align=left] //修正Example6中绘制方式,引入地图坐标偏移计算[/align]
[align=left] public void draw(Graphics g, int offsetX, int offsetY) {[/align]
[align=left] [/align]
[align=left] int firstTileX = pixelsToTiles(-offsetX);[/align]
[align=left] //变更X坐标[/align]
[align=left] int lastTileX = firstTileX + pixelsToTiles(MyPanel.WIDTH) + 1;[/align]
[align=left] [/align]
[align=left] //返回最小X偏移值[/align]
[align=left] lastTileX = Math.min(lastTileX, COL);[/align]
[align=left] [/align]
[align=left] [/align]
[align=left] int firstTileY = pixelsToTiles(-offsetY);[/align]
[align=left] //变更Y坐标[/align]
[align=left] int lastTileY = firstTileY + pixelsToTiles(MyPanel.HEIGHT) + 1;[/align]
[align=left] [/align]
[align=left] //返回最小Y偏移值[/align]
[align=left] lastTileY = Math.min(lastTileY, ROW);[/align]
[align=left] //在Java或任何游戏开发中,算法都是最重要的一步,本例尽使用[/align]
[align=left] //简单的双层for循环进行地图描绘,[/align]
[align=left] for (int i = firstTileY; i < lastTileY; i++) {[/align]
[align=left] for (int j = firstTileX; j < lastTileX; j++) {[/align]
[align=left] // switch作为java中的转换器,用于执行和()中数值相等[/align]
[align=left] // 的case操作。请注意,在case操作中如果不以break退出[/align]
[align=left] // 执行;switch函数将持续运算到最后一个case为止。[/align]
[align=left] switch (map[i][j]) {[/align]
[align=left] case 0 : // 地板[/align]
[align=left] g.drawImage(floorImage, tilesToPixels(j) + offsetX, tilesToPixels(i) + offsetY, panel);[/align]
[align=left] break;[/align]
[align=left] case 1 : // 墙壁[/align]
[align=left] g.drawImage(wallImage, tilesToPixels(j) + offsetX, tilesToPixels(i) + offsetY, panel);[/align]
[align=left] break;[/align]
[align=left] }[/align]
[align=left] }[/align]
[align=left] }[/align]
[align=left] }[/align]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐