游戏贴图问题 [小糊涂的灵感]

游戏贴图问题 发表时间: 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
魅力: 魅力:0
经验: 经验: 0
现金: 1000 JD
存款: 没开户
贷款: 没贷款
来自: 辽宁沈阳 China
发帖: 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.
原文地址:https://www.cnblogs.com/cnsoft/p/54594.html