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

修改位图绘制后,但在onDraw()完成之前

杜俊风
2023-03-14

我正在为Android创建一个自制的游戏引擎,但在重用位图画布时遇到了一些问题:

可见的游戏对象在每个帧中接收主画布,以便它们可以使用静态位图或精灵绘制自己。到目前为止一切正常。

精灵由两个位图组成。第一个包含完整的绘图序列,第二个是通过一个Canvas(位图)动态绘制的。结果位图及其画布是在精灵构造函数中创建的,以避免在绘制循环中重新分配。

我对每个需要相同图形序列的对象重复使用这个精灵。该精灵还有一个功能,可以获取包含图形序列不同位置的位图。因此,如果对象希望精灵处于另一个位置,则调用其函数获取位图并绘制到主画布。

所以问题是,所有使用同一精灵的对象最终都会绘制相同的图像。

>

  • 在可见的游戏对象中:

    if(spriteDelay)

    在精灵中:

    当前anvas.draw颜色。透明PorterDuff模式。CLEAR);当前BmpCanvas.draw位图(caledImage, delayedIni, fin, null);返回当前Bmp;

    如果我在返回函数中创建一个新的结果位图和一个新的画布,都可以正常工作:

    currentBmp = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
    currentBmpCanvas = new Canvas(currentBmp);
    

    我假设所有位图都是在onDraw()完成之前绘制的,那么有没有办法解决这个问题,而不必在每个循环中重新分配位图?

    谢谢

  • 共有1个答案

    满雨石
    2023-03-14

    经过几个小时的思考,我选择实现一个我以前没有想到的简单解决方案。

    就像对象游戏接收主画布一样,为什么不对精灵执行相同的操作?

    基本上这是游戏对象的代码

    sprite.smashDelayedCanvas(canvas, focusLocation);
    

    对于精灵来说:

    canvas.drawBitmap(scaledImage, delayedIni, dest, null);
    
     类似资料:
    • 我现在正在做一个游戏,遇到了一些我想不出来的事情。我有一系列的ImageButton,我正在迭代,并在每个按钮上绘制位图。位图本身绘制得很好,但是我也想在这些位图上绘制矩形。 相关代码(如果这还不够,我可以发布更多): 位图本身出现在按钮上,但是我想要绘制的矩形没有被绘制。

    • 问题内容: 我目前有一个迷宫游戏,它绘制一个5 x 5的正方形(占用屏幕的宽度并将其均匀分割)。然后,对于每个使用x和y坐标的框,我使用drawRect绘制彩色背景。 我遇到的问题是我现在需要在同一位置绘制图像,因此需要替换当前的纯背景色填充。 这是我当前用于drawRect的代码(一些示例): 然后,我还需要为画布中的所有其他正方形实现背景图像。该背景将在其顶部绘制简单的1px黑色线条,当前代码

    • 修改绘图曲线精度 默认的,Open-Falcon只保存最近12小时的原始监控数据,12小时之后的数据被降低精度、采样存储。 如果默认的精度不能满足你的需求,可以按照如下步骤,修改绘图曲线的存储精度。 第一步,修改graph组件的RRA,并重新编译graph组件 graph组件的RRA,定义在文件 graph/rrdtool/rrdtool.go中,默认如下: // RRA.Point.Size c

    • 这是我在Libgdx游戏中的当前渲染方法。我试图在关卡的右上角画一个位图字体,但我得到的只是一堆白色框。 我想把乐谱字体添加到某种演员中,然后做一个场景。addActor(myScore),但我不知道怎么做。我按照Steigert的教程创建了一个主游戏类,该类在AbstractLevel类中实例化了场景font,然后扩展到这个级别。 到目前为止,我没有使用任何自定义字体,只是空的新BitmapFo

    • 这是我的线程的最终输出,它获取屏幕截图并将其存储在一个矢量中。 用于获取屏幕截图,这些截图基本上是屏幕的光栅,不包含光标位置。作为一种解决办法,我使用类获取,然后获取一个。然后在该点绘制图像。 如果将记录区域设置为全屏分辨率,则一切都很酷。但是,如果我改变了记录区域,光标会被绘制在错误的位置。 这个黑色光标应该在Eclipse IDE的Play按钮的顶部。然而,它处于错误的位置。 如果光标超出记录

    • 修改绘图曲线精度 默认的,Open-Falcon只保存最近12小时的原始监控数据,12小时之后的数据被降低精度、采样存储。 如果默认的精度不能满足你的需求,可以按照如下步骤,修改绘图曲线的存储精度。 第一步,修改graph组件的RRA,并重新编译graph组件 graph组件的RRA,定义在文件 graph/rrdtool/rrdtool.go中,默认如下: // RRA.Point.Size c