soft-summer-2021 / summer2021

程序设计实践 (2021夏季学期)
34 stars 6 forks source link

使用routateimage函数将遮罩图和原图旋转后会出现图片残缺 #18

Closed oldGreenIsMe closed 3 years ago

oldGreenIsMe commented 3 years ago

`rotateimage(&img_greenTank2_1, &img_greenTank2, greenTankAngle PI 1.0 / 4, SRCINVERT);//遮罩图旋转

rotateimage(&img_greenTank1_1, &img_greenTank1, greenTankAngle PI 1.0 / 4, WHITE);//原图旋转

putimage(tank1_x, tank1_y, &img_greenTank2_1, NOTSRCERASE);//遮罩图

putimage(tank1_x, tank1_y, &img_greenTank1_1, SRCINVERT);//原图 ‘

如题, image

同时问以下遮罩后图片仍与背景有色差,请问怎么处理

还有怎样避免坦克出现在视线外(使用rand函数)且避免坦克初始化在无法通行的墙上

dyn1721 commented 3 years ago

这个图片残缺好像是easyx这个函数自己的问题,旋转后不能自动改变图片大小

参考一下这个博客 ? 博主好像解决了这个旋转函数透明背景旋转图片残缺问题

第三个问题我的初步想法是rand随机数后判断一下,如果超出窗口范围或者和墙重叠就再随机获取个数
如何判断是否和墙重叠的话 专门存个障碍物数组,存着这些障碍物坐标,生成的坦克坐标和这个数组遍历比较即可

oldGreenIsMe commented 3 years ago

这个图片残缺好像是easyx这个函数自己的问题,旋转后不能自动改变图片大小

参考一下这个博客 ? 博主好像解决了这个旋转函数透明背景旋转图片残缺问题

第三个问题我的初步想法是rand随机数后判断一下,如果超出窗口范围或者和墙重叠就再随机获取个数 如何判断是否和墙重叠的话 专门存个障碍物数组,存着这些障碍物坐标,生成的坦克坐标和这个数组遍历比较即可

那请问以下旋转前设置的x,y参数均为图片左上角参数,旋转后仍是图片上的同一点吗?如果是,我是需要根据旋转角度计算遍历障碍物数组还是取近似值呢,哪个更好些

dyn1721 commented 3 years ago

我看你的坦克图片白边有点大,所以如果以图片左上角作为坦克坐标,还是会和墙壁有个缝隙

我觉得尽量去掉这些白底效果会更好些

最后一个旋转和碰撞的问题: 你的坦克旋转好像是任意角度旋转?那这个碰撞判断就有点麻烦 可能就需要用到一些复杂的多边形碰撞检测算法了 当然如果对碰撞判定没那么"严格",允许稍微隔着一小段距离,你可以永远以坦克中心点作为坦克的坐标

oldGreenIsMe commented 3 years ago

我看你的坦克图片白边有点大,所以如果以图片左上角作为坦克坐标,还是会和墙壁有个缝隙

我觉得尽量去掉这些白底效果会更好些

最后一个旋转和碰撞的问题: 你的坦克旋转好像是任意角度旋转?那这个碰撞判断就有点麻烦 可能就需要用到一些复杂的多边形碰撞检测算法了 当然如果对碰撞判定没那么"严格",允许稍微隔着一小段距离,你可以永远以坦克中心点作为坦克的坐标

我是说比如我putimage(),里头的x,y参数是按照图片左上角吗

dyn1721 commented 3 years ago

你自己试试效果呗

我看你的坦克图片白边有点大,所以如果以图片左上角作为坦克坐标,还是会和墙壁有个缝隙 我觉得尽量去掉这些白底效果会更好些 最后一个旋转和碰撞的问题: 你的坦克旋转好像是任意角度旋转?那这个碰撞判断就有点麻烦 可能就需要用到一些复杂的多边形碰撞检测算法了 当然如果对碰撞判定没那么"严格",允许稍微隔着一小段距离,你可以永远以坦克中心点作为坦克的坐标

我是说比如我putimage(),里头的x,y参数是按照图片左上角吗

对呀

Dludora commented 3 years ago

xd你的loadimage是使用的绝对路径还是相对路径