游戏贴图问题 |
发表时间: 2003-8-31 下午8:58 |
|
载入一个地图物件图片(.png) ,是一个包含要显示在地图上的物件
规格16*16 总长度16*90,读取level.dat文件包含的地图区域大小,
以及要地图物件的排列情况,存放在一个二维数组中,
数组的大小表示总地图的显示区域宽,高,行×16,列×16
数组的内容表示要显示的图片(16*16)在地图物件图片(.png)的位置
我是这样切割显示的,得不到想要的效果 :(
//贴背景图
//数组的内容是要显示图片的内容,数组的排列方式就是图片的显示位置
//从下到上,从右往左贴,先贴满一个Canvas区域
for (int i =backgroundMapData.length-1; i >=0; i--)
for (int j =backgroundMapData[i].length-1; j >=0 ; j--) {
int data = backgroundMapData[i][j];
//XCellNum表示一个Cavans宽所能容纳的图片个数XCellNum=getWidth()/16
if(data<=0||j>XCellNum)continue;
//YCellNum表示Canvas高 Y方向能容纳的图片个数YCellNum=getHeight()/16
if(i<YCellNum)break;
//切割背景图片
g.translate(data*16, 0);
g.setClip(0, 0, CELLWIDTH, CELLHEIGHT);
g.translate(-data*16,0);
g.drawImage(mapObjectImage, j * CELLWIDTH, i * CELLHEIGHT,
Graphics.LEFT | Graphics.TOP);
}
初次写游戏,想让图片人物移动的时候再画出其他的图像,不知可否给出类似效果的代码给予参考,或指定小弟,谢谢. |
Re: 请问比手机屏幕大的图像如何显示? |
发表时间: Aug 1, 2003 1:29 PM |
|
我知道有两个方式,说出来大家交流一下:
1,普通绘画,控制坐标和大小就可以了,setClip(x,y,w,h)
2双缓存方式
|
在使用Canvas类画图的时候,为了保证不画出边界,使用了g.setClip()方法:
int nClipX = g.getClipX();
int nClipY = g.getClipY();
int nClipWidth = g.getClipWidth();
int nClipHeight = g.getClipHeight();
// 设置新的Clip区域
g.setClip(m_posX, m_posY, m_width, m_height);
...... // 画图操作
......
// 恢复原始的Clip区域
g.setClip(nClipX, nClipY, nClipWidth, nClipHeight);
但是恢复之后的Clip区域并不等于原始的Clip区域,试了一下,好象Clip区域只能从大往小设置,不能再从小往大设置,为什么?那位大侠有没有解决的办法,谢谢了!
!!使用 setclip注意的问题.
Rectangle oldClipBounds = g.getClipBounds(); Rectangle clipBounds = new Rectangle(...); g.setClip(clipBounds); ....... g.setClip(oldClipBounds);
在MIDP1.0中简单模拟图片翻转功能。 |
|
|
|
|
pctkx
头衔: 灯心
门派: 烛光制作组
信息:
威望: 0
魅力:
经验:
现金: 1000 JD
存款: 没开户
贷款: 没贷款
来自: 辽宁沈阳
发帖: 162 篇
精华: 0 篇
在线: 58 时 43 分 04 秒
注册: 2003/08/03
|
|
消息 查看 搜索 好友 复制 引用 回复
|
[楼 主] |
|
|
[这个贴子最后由pctkx在
2004/09/29 11:55am 第 7 次编辑]
代码如下:
public void paintImage(Graphics g,Image image,int x,int y)
{
for(int i=0;i< image.getWidth();++i)
{
g.setClip(x+i,y,1,image.getHeight());
g.drawImage(image,x-image.getWidth()+i*2+1,y,Graphics.TOP|Graphics.LEFT);
}
}
利用这个办法同样也能实现不同角度的翻转。
只供参考,因为要求手机的性能要好,可能不太实用。
|
|
|
|
|
|
Never giveup. Thanks the world.