在游戏中通常不可能允许一幅场景贯穿始终,这就提出了场景变更的要求,基于这一要求的实现,我们将进行如下效果的Java代码实现。
下载地址http://www.3adisk.com/?onlinezero[文件名:RpgChair0to6.rar]或另存以下X(gif)文件为rar
<!--[if gte vml 1]><v:shapetype id="_x0000_t75" coordsize="21600,21600"
o:spt="75" o:preferrelative="t" path="m@4@5l@4@11@9@11@9@5xe" filled="f"
stroked="f">
<v:stroke joinstyle="miter" />
<v:formulas>
<v:f eqn="if lineDrawn pixelLineWidth 0" />
<v:f eqn="sum @0 1 0" />
<v:f eqn="sum 0 0 @1" />
<v:f eqn="prod @2 1 2" />
<v:f eqn="prod @3 21600 pixelWidth" />
<v:f eqn="prod @3 21600 pixelHeight" />
<v:f eqn="sum @0 0 1" />
<v:f eqn="prod @6 1 2" />
<v:f eqn="prod @7 21600 pixelWidth" />
<v:f eqn="sum @8 21600 0" />
<v:f eqn="prod @7 21600 pixelHeight" />
<v:f eqn="sum @10 21600 0" />
</v:formulas>
<v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect" />
<o:lock v:ext="edit" aspectratio="t" />
</v:shapetype><v:shape id="_x0000_i1025" type="#_x0000_t75" style='width:366pt;
height:378.75pt'>
<v:imagedata src="file:///C:/DOCUME~1/chenpeng/LOCALS~1/Temp/msohtml1/03/clip_image001.gif"
o:title="Ex6_01" />
</v:shape><![endif]--><!--[if !vml]--><!--[endif]-->
由于代码量已开始增加,由本回开始仅给出部分代码实现,详细请进行下载:
在本例中,本人采取的位图偏移算法如下:
<!--[if gte vml 1]><v:shape
id="_x0000_i1026" type="#_x0000_t75" style='width:414.75pt;height:286.5pt'>
<v:imagedata src="file:///C:/DOCUME~1/chenpeng/LOCALS~1/Temp/msohtml1/03/clip_image002.gif"
o:title="Ex6_02" />
</v:shape><![endif]--><!--[if !vml]--><!--[endif]-->
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开始,为了实现背景的移动,所有算法都要加入偏移值
public void 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中绘制方式,引入地图坐标偏移计算
public void draw(Graphics g, int offsetX, int offsetY) {
int firstTileX = pixelsToTiles(-offsetX);
//变更X坐标
int lastTileX = firstTileX + pixelsToTiles(MyPanel.WIDTH) + 1;
//返回最小X偏移值
lastTileX = Math.min(lastTileX, <state w:st="on"><place w:st="on"><em><span lang="EN-US" style='font-size: 10pt; font-family: "Courier New"; color: rgb(0, 0, 192);'>COL</span></em></place></state>);
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;
}
}
}
}
分享到:
相关推荐
这个游戏是在Eclipse3.3+JDK1.6下编译运行的(注意:必须要是在JDK1.6或者是JDK1.6以上才可以,不然就会出现错误). 游戏中简单增加了声音的处理,可惜的就是没有图片. 这是一个JAVA工程,下载下来之后直接有Eclipse导...
这个是比较原始的版本,因为游戏中只实现了蛇的基本功能,并没有加入游戏的规则. 这些代码是在JDK1.5下编译运行的.所以必须装上JDK1.5或者以上的版本,不然会出现一些小小的错误,这是JDK之间不兼容造成的. 蛇用...
java实现的电脑自动关机,涉及到java的线程,图形化编程,和java时间处理
人生如梦,岁月如歌.doc
2019年新版----特种设备作业——快开门式压力容器.docx
这是一个给客户做的进销存项目源代码,采用C#语言+MS-SQL2008,所有项目全部开源,非常全面的功能:进货管理、销售管理、库房管理、往来管理、报表管理
人生如梦一尊还酹江月苏轼念奴娇赤壁 怀古全诗翻译赏析 原文 大江东去浪淘尽千古风流人物故垒西边人道是三国周郎赤壁 乱石穿空惊涛拍岸卷起千堆雪江山如画一时多少豪杰 遥想公瑾当年小乔初嫁了雄姿英发羽扇纶
前端吃豆游戏小案列适合新手
基于Java语言和SSM框架编写的考试管理系统,适合拿来作为SSM框架练手作品,本人使用数据库为Mysql8.0,有使用MySQL5.0的请自行修改POM.xml和jdbc.properties
蜘蛛纸牌,单机版纸牌游戏,VC++实现 windows下可运行~
C#开始的ERP进销存框架,有权限管理、库存管理、进货、销售,收付款及各类报表,纯源代码,给一个工厂做的项目
《Delphi7 高效数据库程序设计》PDF完整版。现在这些东西真的很难找,但这个是我收藏的。昨天去新华书店去看了一下,delphi的书已经全面下架了,根本找不到。唉,人生如梦啊...............
“游戏规则”在改变,因此如果在一开始没有意识到这点,就会产生重大的设计难题。 “存在适用于所有拓扑结构的公式,我们仅需使用它们就可以解决所有问题”--该论点正确吗?错,事实上尽管本应注释也提供了一套...
以大型网络游戏《圣王/永生》为例,介绍网游客户端关键系统与常用设计技巧。
Java项目CRM客户管理系统,适合作为自己的项目模板
路网最优路径算法详述,阐述导航中(或者游戏地图寻路)中,最常用的最短路径算法。
0405S推出低于1pF的天线压敏电阻,以及为行动电话设计的一体化ESD/EMI滤波器。 EPCOS ESD/EMI滤波器系列中,0405声频滤波器用于保护麦克风和喇叭接脚不受静电放电(ESD)损害和干扰。... 来源:人生如梦
其中,“记人咏物、怀旧惜别、人生如梦”是苏轼涉梦词创作的主要内容。而在影响苏轼涉梦词创作的诸多因素中,个人人生经历、佛道思想的影响、前人涉梦文学创作的影响无疑起到了主要作用。苏轼的涉梦词还反映了其对...
电路的功能 采用宽带信号的视频设备必须解决好与同轴电缆的匹配问题,一个输出端不能并联几根电缆。 信号分配的办法,可以在低输出阻抗放大器的输出端加几个匹配用的75欧电阻或象本电路... 来源:人生如梦
图1所示电路会产生在寻呼机及其它具有小型图像液晶显示的便携式仪器中所需要的二个电源:一个稳定的3.3V,100mA,和一个用于为... 点此下载全文PDF资料:可同时产生辅助LCD偏压的单电池升压转换器.pdf 来源:人生如梦