DirectX二维游戏中精灵与map间的精确像素碰撞

DirectX二维游戏中精灵与地图间的精确像素碰撞
背景地图直接用一张bmp图片贴在底层(宽高经过调整成窗口的大小后渲染出),规定了里面黑色的是可移动区域,非黑色的是障碍。
精灵就是一个矩形位图。

想构造一个函数来检测精灵与地图间的精确碰撞,打算检测精灵矩形外接圆上的八个点在地图上的颜色来检测是否与地图碰撞,传入参数就是精灵的世界坐标和移动方向。

自己参考着网上一些纹理与纹理之间的碰撞代码写了一个发现实现不了功能,估计首先世界坐标和地图的纹理坐标之间的转换不当,这里先求教下怎么转换;其次再问问如果我要加上游戏中用武器破坏地图(打算用黑圆遮住被破坏部分)后仍可实现准确的碰撞检测,是不是只能用LPDIRECT3DSURFACE backbuffer作为检测对象?如果是,它的检测和直接对纹理LPDIRECT3DTEXTURE的检测又有何不同?

其实最希望各位大神能给个模板,小弟初学对很多用法都不甚了解,还望多多帮助。

先谢~
------解决方案--------------------
把你的地图生成一组数组 每次移动检测屏幕内的数字是否能行走不就可以了。。。
------解决方案--------------------
引用:
直接锁定backbuffer会导致与游戏绘图函数运行冲突,所以另外建了一个表面,这个表面只是直接装载了地图的图片,未经放缩处理,所以加入了坐标变换。。效率优化问题就以后再处理了,求大神看看哪里错了,这个函数完全实现不了功能啊。。(worldx,worldy是精灵的窗口坐标,coord[8][2]为预先算好的八点相对位置,非全屏游戏)
bool Collidion_TestSE(int world……


我写的精灵碰撞也是LockRect纹理(我用的是IDirect3DTexture9),因为我知道精灵的坐标,而且,我的2D碰撞都是不支持缩放的,所以,每个精灵像素的屏幕坐标就是等于“精灵相对于屏幕的坐标 + 该像素相对于精灵的坐标”

如果不考虑缩放,那伪代码可以这样:

首先用矩形框判断,如果精灵与要检测的地图矩形范围不相交,则直接返回false

精灵表面->LockRect();
for (int i=第0个精灵像素; i<最后一个精灵像素; i++)
{
if (当前的精灵像素的alpha值为0,则表明无像素)
continue;

for (int j=第0个地图像素坐标; j<最后一个地图像素坐标; j++)
{
1:将当前的精灵像素坐标转换成屏幕坐标
2:如果转换后的精灵屏幕坐标和地图像素坐标相等,则碰撞成功 return true;
}
}
精灵表面->UnlockRect();


如果要考虑缩放的话,那也一样,把缩放后的精灵像素拿来判断就行了.(7楼的代码我帮不了)