当前位置: 首页 > 知识库问答 >
问题:

如何制作一个等价的雪碧。画()给精灵。draw()?

高宸
2023-03-14

我通过在精灵上调用draw,然后在SpriteBatch上调用draw来绘制相同的精灵。

target.sprite.draw(game.batch);

game.batch.draw(target.sprite, target.sprite.getX(), target.sprite.getY(), 
                target.sprite.getOriginX(), target.sprite.getOriginY(),
                target.sprite.getWidth(), target.sprite.getHeight(),
                target.sprite.getScaleX(), target.sprite.getScaleY(),
                target.sprite.getRotation(), false);

...但是与第一个调用相比,第二个调用以90度角绘制精灵。当我减去90度来补偿时,精灵不对齐,因为它们相对于屏幕旋转相同的点,但相对于它们自己旋转不同的点(用SpriteBatch.draw()调用绘制的精灵围绕用Sprite.draw()绘制的精灵的原点旋转)。

我如何做一个等效的Sprite. Batch.draw()调用?

共有1个答案

那正初
2023-03-14

从您发布的代码中可以看出这有点棘手,但我认为您正在调用以下函数:

/** Draws a rectangle with the texture coordinates rotated 90 degrees. The bottom left corner at x,y and stretching the region
 * to cover the given width and height. The rectangle is offset by originX, originY relative to the origin. Scale specifies the
 * scaling factor by which the rectangle should be scaled around originX, originY. Rotation specifies the angle of counter
 * clockwise rotation of the rectangle around originX, originY.
 * @param clockwise If true, the texture coordinates are rotated 90 degrees clockwise. If false, they are rotated 90 degrees
 *           counter clockwise. */
public void draw (TextureRegion region, float x, float y, float originX, float originY, float width, float height, float scaleX, float scaleY, float rotation, boolean clockwise);

这里需要注意的关键是,第四和第五个参数不是要旋转的原点,而是相对于该原点的偏移。如果希望功能与sprite匹配。draw(),应该将0传递为originX和originY。

如果你想避免90*旋转(这似乎是非常有意的;我想这可能是为了让你可以定义0度或弧度为“向上”而不是“向右”,如果这有意义的话),你应该使用该函数的重载版本,它忽略了最后一个参数(顺时针布尔)。

您可以在Batch接口(SpriteBatch正在实现)的libGDX源代码中找到所有这些。

 类似资料:
  • 从精灵图(雪碧图)中创建精灵【为了防止与精灵混淆,我在之后的译文中都将采用雪碧图这一译法】 你现在已经知道了怎么从一个单文件内加载图像。但是作为一个游戏设计师,你没准更经常使用 雪碧图(也被称之为 精灵图)。Pixi封装了一些方便的方式来处理这种情况。所谓雪碧图就是用一个单文件包含你游戏中需要的所有文件,这里就是一个包含了游戏对象和游戏觉得的雪碧图。 整个雪碧图是192192像素宽高,但每一个单图

  • 我正在用移动的精灵和障碍物制作游戏来学习SpriteKit。我希望移动的精灵与障碍物相撞并从障碍物上反弹,但我希望障碍物保持固定。我该怎么做?我尝试了以下方法,但没有成功: 设置障碍物.physicsBody?。isDynamic=true。这使得精灵们穿过了障碍物 使用 。我知道<代码>联系人。车身A和是通过值而不是引用传递的,因此我循环通过一个带有障碍物的数组,并以此方式设置速度。障碍物仍然被

  • 我肯定我错过了一些非常明显的东西,但我是初学者,所以请不要压碎我。我的问题是我有一个视口比屏幕小的舞台。现在我也想直接用Sprite.draw(SpriteBatch)在屏幕上画一个雪碧。雪碧和舞台的位置不重叠。舞台画得很好,但是雪碧看不见。当我注释掉渲染方法中的stage.draw()部分时,雪碧是可见的。 代码:这是我的渲染方法: 在这里,我初始化相机和舞台(StalleHeight是一个in

  • XYQuickDeveloper 是一个常用方法与常用第三方库的集合。目前实现了一个帧动画精灵类 XYSpriteView。XYSpriteManager 是一个精灵管理类,里面实现了定时器。 [Code4App.com]

  • 问题内容: 有什么好的工具可以制作CSS精灵? 理想情况下,我想给它一个图像目录和一个引用这些图像的现有.css文件,并使其创建具有所有小图像优化的大图像,并更改我的.css文件以引用这些图像。 至少我希望它获取一个图像目录,并生成一个大的精灵和将每个精灵用作背景所必需的.css。 有没有很好的photoshop插件或功能完备的应用程序可以做到这一点? 问题答案: 这将为您完成90%的工作:CSS

  • 在创建完精灵后,现在你能试着修改精灵的属性去控制它了。 创建精灵: auto mySprite = Sprite::create("mysprite.png"); 锚点 锚点确定了精灵对象在计算坐标位置的一个基准点,这个点是精灵内部的点,锚点影响精灵的缩放,旋转,倾斜这种转换,不影响颜色,透明度这种属性。锚点使用的坐标系以左下角为原点 (0, 0),在你设置锚点的值时,要注意到这一点。默认情况下