SFML中IntRect使用问题:无法按教程直接传入构造函数
问题分析:SFML中setTextureRect直接传构造函数失效的原因
问题代码
taa.left = 0; taa.top = 0; taa.height = playerSpriteSize.y; taa.width = playerSpriteSize.x; player.setTextureRect(taa); // 该行无法正常工作 player.setTextureRect(sf::IntRect(0, 0, 50, 50));
核心原因及解决办法
最常见的问题是硬编码的参数与实际所需的纹理矩形尺寸不匹配:
- SFML的
sf::IntRect构造函数参数顺序是left, top, width, height,和你逐个设置taa的逻辑一致,但你直接传入的50,50和playerSpriteSize.x/y的真实数值可能不一样。 - 如果
playerSpriteSize.x/y不是50(比如是64、100这类其他数值),构造的新矩形要么超出纹理的有效像素范围,要么尺寸不对,导致Sprite显示空白(看起来像“无法运行”)。
还有一种小概率情况:如果你的纹理本身尺寸小于50x50,直接传的这个矩形会因超出纹理边界被SFML裁剪,自然无法正常渲染,而之前的taa用的是和纹理匹配的尺寸,所以能正常显示。
解决方式
把硬编码的50,50替换成和taa一致的动态值即可:
player.setTextureRect(sf::IntRect(0, 0, playerSpriteSize.x, playerSpriteSize.y));
内容的提问来源于stack exchange,提问作者Keke
相关产品推荐
相关产品推荐

