易码技术论坛

 找回密码
 加入易码
搜索
查看: 569782|回复: 22

正经的lav代码求助~~我知道放在程序版里不会有人看的~~(已解决)

[复制链接]
发表于 2007-9-11 17:39:22 | 显示全部楼层
现在知道用第二种方法对的(原先不显图是后面写错了额)
但是新问题出现
继续问下

显示出图了,但是
图片:
noname.JPG


现在图片能读出来,
但是读出的图从图中黄线画的地方全是左右颠倒的????放大看

哪位大哥解释下
我写的读和画代码
读图时

void loadunit(char id)
{
fseek(fp2,(id-1)*32,0);
fread(unit,1,32,fp2);
}
绘图时
void draw()
{  for(i=0;i<10;i++)
  {
  for(j=0;j<5;j++)
   {
   loadunit(map[i+j*10]);
   WriteBlock(i*16,j*16,16,16,1,unit);
   }
  }
Refresh();
}
发表于 2007-9-11 17:44:04 | 显示全部楼层
你把一个大地图先读出来,然后再转到map[50]里,char map[5][10];没错,但麻烦.
 楼主| 发表于 2007-9-11 17:45:06 | 显示全部楼层
又有问题了....
帮忙看下..
在2楼
发表于 2007-9-11 17:45:55 | 显示全部楼层
...
发表于 2007-9-11 17:46:43 | 显示全部楼层
引用第4楼大铜板2007-09-11 17:45发表的“”:

那是图片数据读错了,少加了1!
 楼主| 发表于 2007-9-11 17:47:28 | 显示全部楼层
什么意思?
发表于 2007-9-11 17:47:38 | 显示全部楼层
应该是fseek(fp2,id*32,0);
发表于 2007-9-11 17:49:50 | 显示全部楼层
还有不要边读边显示,那样废电,速度慢.
 楼主| 发表于 2007-9-11 17:51:13 | 显示全部楼层
引用第7楼大铜板2007-09-11 17:47发表的“”:
应该是fseek(fp2,id*32,0);

改成这个不对啦
我数据是从0开始的
id号也是从1开始的
所以读的时候要id-1,然后*32到我要的图片数据开头..
发表于 2007-9-11 17:51:53 | 显示全部楼层
char map[32];
....
loadunit(map+i+j*10);
....
发表于 2007-9-11 17:54:56 | 显示全部楼层
void loadunit(char id)
{
fseek(fp2,(id-1)*32+1,0);
fread(unit,1,32,fp2);
}
或者
void loadunit(char id)
{
fseek(fp2,(id-1)*32-1,0);
fread(unit,1,32,fp2);
}
 楼主| 发表于 2007-9-11 17:58:16 | 显示全部楼层
引用第11楼大铜板2007-09-11 17:54发表的“”:
void loadunit(char id)
{
fseek(fp2,(id-1)*32+1,0);
fread(unit,1,32,fp2);
}
.......

是减个1就正常了...不动手根本不知道要这样...额

不过按你说的
要怎样写才能不耗电又快了?

另外
引用第10楼大铜板2007-09-11 17:51发表的“”:
char map[32];
....
loadunit(map+i+j*10);
....
什么意思?
引用第8楼大铜板2007-09-11 17:49发表的“”:
还有不要边读边显示,那样废电,速度慢.

我先读完整个map[50],然后再显示,是这样吗?

这样滚屏就会做了,哈哈
发表于 2007-9-11 18:04:41 | 显示全部楼层
先用一个数组把地图图素放进去,比如你有100个16*16的图,那么用pic[100*32=3200]大小的数组即可,
这样写fread(pic,1,3200,fp);
绘图时
void draw()
{ for(i=0;i<10;i++)
  {
  for(j=0;j<5;j++)
  {
  WriteBlock(i*16,j*16,16,16,1,pic+(map[i+j*10]-1)*32);
  }
  }
Refresh();
}
map从0开始就不用-1了!
发表于 2007-9-11 18:09:07 | 显示全部楼层
10楼的是错的.
 楼主| 发表于 2007-9-11 18:10:01 | 显示全部楼层
哦,知道了
不过我的图是255张16*16的....255*32=8160,太耗空间了..不是文曲星一般只有20k可用吗?
解决的话..第一次这样读,然后根据行走截部分图下来,之后移动,再补没有的的,数据就一起前移或后移,然后补上新的,滚屏就是这样吗?


ps:下了...明天再来看.
发表于 2007-9-11 18:11:56 | 显示全部楼层
基本就是那样滚屏的.
发表于 2007-9-11 20:25:53 | 显示全部楼层
引用第15楼星痕2007-09-11 18:10发表的“”:
哦,知道了
不过我的图是255张16*16的....255*32=8160,太耗空间了..不是文曲星一般只有20k可用吗?
解决的话..第一次这样读,然后根据行走截部分图下来,之后移动,再补没有的的,数据就一起前移或后移,然后补上新的,滚屏就是这样吗?


.......
是的,8K而已嘛,全都读出来……
 楼主| 发表于 2007-9-11 20:46:01 | 显示全部楼层
引用第17楼1162050352007-09-11 20:25发表的“”:

是的,8K而已嘛,全都读出来……



额...原来如此啊
那么
支持的最多 if 语句有多少,无限多吗?
还有void 这些子函数最多能有多少个?
发表于 2007-9-11 20:50:59 | 显示全部楼层
引用第18楼星痕2007-09-11 20:46发表的“”:




额...原来如此啊
.......
尽管用吧,反正够用……
发表于 2007-9-11 21:22:23 | 显示全部楼层
引用第18楼星痕2007-09-11 20:46发表的“”:
支持的最多 if 语句有多少,无限多吗?
还有void 这些子函数最多能有多少个?
.......
并列的if和子函数无限个理论可以,如果嵌套,最好不要太多,
还有子函数也不能嵌套太多,那样电脑端速度会慢,
若星星上则极容易死机.
您需要登录后才可以回帖 登录 | 加入易码

本版积分规则

Archiver|手机版|小黑屋|EMAX Studio

GMT+8, 2025-5-1 19:20 , Processed in 0.013528 second(s), 19 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表