社区
J2ME
帖子详情
j2me中地图怎么实现
iwillfling
2006-04-18 09:26:32
游戏中的地图比屏幕要大.听说要用数组实现,怎么实现数组和图片的对应,当人物移动到边上时,地图也要跟着移动.
...全文
844
16
打赏
收藏
j2me中地图怎么实现
游戏中的地图比屏幕要大.听说要用数组实现,怎么实现数组和图片的对应,当人物移动到边上时,地图也要跟着移动.
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
16 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
wtobias
2006-06-08
打赏
举报
回复
你可以用编辑器自己编辑
也可以自己拼数组
xiyuanna
2006-06-01
打赏
举报
回复
飞天鼠真是谢谢了,一直都没弄明白是怎么回事,被你一说懂了不少
ForestOcean
2006-05-14
打赏
举报
回复
标记。。。学习中。。。
shiyonggang
2006-05-14
打赏
举报
回复
http://bbs.j2me.com.cn/这里已经提供了地图编辑器工具,而且也有专门讨论区,交流地图编辑器的用法
egxsguo
2006-05-12
打赏
举报
回复
难就难在速度太慢,16*16的Tile,要用64块才能铺满128*128的一屏,也就是说一帧要setClip64次,drawImage64次,呵呵,要是滚动起来肯定有的受
shiyonggang
2006-05-12
打赏
举报
回复
自己写地图编辑器啊,难道你想怎样
delphiseabird
2006-05-12
打赏
举报
回复
地图编辑器不一样,算法也不一样。总得来说是让同时再入的地图越少越好。
--------------------------------
www.coderpub.com coderpub技术论坛
iwillfling
2006-05-04
打赏
举报
回复
你用的是什么地图编辑器?
shiyonggang
2006-05-04
打赏
举报
回复
使用地图编辑器生成地图数组,然后根据数组的数据绘制地图,没啥难得啊
jobenc
2006-04-27
打赏
举报
回复
我用的是1.0,实在是不好写啊
贝壳鱼
2006-04-26
打赏
举报
回复
好好想想
MrYoucheng
2006-04-26
打赏
举报
回复
1 地图多大你就搞个w×h的数组
2 算出你地图宽度和高度的一半(是tile啊)
3 人物所在位置左边上边各减上面算出的一半,下面右边各加一半就得到要显示的区域
4 当然如果算出来的区域值超界了调整一下就可以了
brey
2006-04-24
打赏
举报
回复
midp2.0可以用TiledLayer类
midp1.0要自己写
sy7907
2006-04-24
打赏
举报
回复
在Act游戏中的地图是根据主角的移动而反方向移动的,其实主角始终都处于当前的屏幕内,只是作为背景的地图反方向的作了移动,从视觉上来看主角向前移动了。
一般都将组成地图背景的各个小方块图片的索引放在一个二维数组中,如果数据过大可以考虑将地图索引数据保存在文件中,游戏初始化的时候再读入地图数据。地图数据文件以后缀名为.map存储。
具体的方法如下:
注:本文的例子是在NOKIA的平台下面的代码,所以屏幕的大小为128*128,整张地图是由16*37个小方格组成
//导入地图数据
public void levelMapGenerate() {
int x, y;
byte data[]=new byte[16];
try {
DataInputStream dis = new DataInputStream(getClass().
getResourceAsStream(
"/maps/gamemap.map"));
//dis.read(data);
x = 16;
y = 37;
System.gc();
this.mapArray = null;
this.mapArray = new byte[y][x];
for (int i = 0; i < y; i++) {
dis.read(); //
dis.read();//读取换行符
dis.read(data1);
for (int j = 0; j < x; j++) {
this.mapArray[i][j] = (byte) (data[j] - 48);//将ASCII码值转换位数据的实际值
System.out.print("mapArray["+i);
System.out.print("]["+j);
System.out.println("]=="+mapArray[i][j]);
}
}
}
catch (Exception ex) {
ex.printStackTrace();
}
System.gc();
}
地图数据是以字符串方式直接存到了.map文件中,没有进行任何编码的处理。可以直接用文本编辑工具打开进行修改。这里有两点需要注意,第一,读入的数据是ASCII码值,所以读进来以后需要进行编码的转换,即减去48。第二,地图数据是按行列进行排列的,在每一行的末尾都有换行符,所以在读取数据的时候也将每行的换行符读了进来。这也是为什么有两个read()的原因。
另外还有另外一种方式举行存储地图数据,就是将地图数据转换为二进制文件,然后读取这个二进制文件,这样做的好处在于可以减小地图数据的大小,同时也在一定程度上对数据进行了加密。具体的实现方法见其他例子。
当然地图数据也可以直接在代码中写出,不需要从文件中读取。
回到主提,将读入的数据放在二维数组mapArray后,就是如何处理主角的移动了。
在定义Map这个类的时候,定义两个成员变量x,y分别表示当前的屏幕在整张地图中的坐标(左上角)
static Image[] mapImage = new Image[6]; //组成地图的小方格图片
static byte[][] mapArray; //地图数组
static int x, y, startX, startY; //x,y是当前屏幕的坐标
public void Map(){
x = 0;
y = 0;
startX = x;
startY = y;
try {
for (int i = 0; i < mapImage.length; i++) {
mapImage[i] = Image.createImage("/images/" + "mapt" + i + ".png");
}
}
catch (Exception ex) {
ex.printStackTrace();
}
levelMapGenerate();
}
在进行画图的时候需要判断当前屏幕坐标在这个地图中的位置,即处于二位数组的位置。
以下是Map类的paint函数:
public void paint(Graphics g) {
int starti, startj;
starti = (x - startX) / 32;
startj = (y - startY) / 16;
for (int i = starti; i < starti + 5 && i < this.mapArray.length; i++) {
for (int j = startj; j < startj + 9 && j < this.mapArray[0].length; j++) {
g.drawImage(mapImage[this.mapArray[i][j] % 6],
i * 32-x,
j * 16-y, Graphics.LEFT | Graphics.TOP);
}
}
}
每次只画出128*128大小的屏幕,即4*8个32*16大小的方格。
整个Map类的设计就写好了,下面就是如何去响应主角的移动了,这个例子中主角是可以四个方向移动的。
public void MoveX(int dx) {
if (dx != 0) {
if ( (map.x + dx <= 37*32-128 ) && (map.x + dx >=0)) {
ChangeMapXY(dx, 0);
}
}
}
public void MoveY(int dy) {
if (dy != 0) {
if ( (map.y + dy < 128) && (map.y + dy >= 0)) {
ChangeMapXY(0, dy);
}
}
}
主要的难点是在边界时进行越界的判断,根据情况的不同,条件也会不同。然后再Keypress()和KeyReleased()里面根据实际的情况改变dx,dy的值就可以实现主角在地图中的移动问题了。
我还没有试过,你看看吧,我不知道上边写的对不!
sayigood
2006-04-23
打赏
举报
回复
是的,你查一些相关的书,王森的不错!
网络咖啡
2006-04-19
打赏
举报
回复
恩
手机游戏
j2me
MapEditor
地图
编辑器
《手机游戏
j2me
MapEditor
地图
编辑器详解》 手机游戏的发展日新月异,而作为游戏开发的重要一环,
地图
编辑器起着至关重要的作用。在Java 2 Micro Edition (
J2ME
) 平台上,MapEditor是一款专门用于创建和编辑手机...
J2ME
_Map_Test.rar_
j2me
_
地图
_
地图
代码
描述
中
提到的“
J2ME
实现
地图
滚动,简单的
地图
滚动实例,包括源代码和
地图
文件”揭示了这个项目的核心功能:它提供了一个能够滚动查看
地图
的用户界面。这涉及到
地图
数据的加载、渲染以及用户交互处理,比如通过触摸或...
J2ME
_Map.rar_
J2ME
地图
_
J2ME
游戏_
j2me
游戏_
j2me
_m_绘制
地图
总之,
J2ME
地图
设计与绘制涉及
地图
规划、数据结构选择、图形渲染以及性能优化等多个方面。通过学习这些技术,开发者可以创建出丰富多彩且性能良好的
J2ME
游戏,为玩家带来沉浸式的游戏体验。在
J2ME
这个相对古老的平台...
j2me
编程Google
地图
实现
经代码
**
J2ME
编程与Google
地图
实现
** 在移动设备上
实现
地图
功能是许多应用程序的核心需求,尤其是在GPS导航领域。
J2ME
(Java 2 Micro Edition)是Java平台的一个子集,专为资源有限的嵌入式设备如手机和PDA设计。本教程将...
J2ME
游戏开发
中
的
地图
设计与绘制.doc
在
实现
地图
绘制时,还要考虑到性能优化,比如使用位图(Bitmap)技术来减少内存消耗,以及预处理图块到单个大图(Tile Sheet)
中
,减少绘制调用次数。此外,使用缓存(Cache)策略可以避免频繁地加载和卸载
地图
数据...
J2ME
13,097
社区成员
26,492
社区内容
发帖
与我相关
我的任务
J2ME
Java J2ME
复制链接
扫一扫
分享
社区描述
Java J2ME
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章