gpt4 book ai didi

camera - 有没有办法将 alpha mask 应用于 FlxCamera?

转载 作者:行者123 更新时间:2023-12-03 03:22:13 25 4
gpt4 key购买 nike

我正在尝试实现 this camera但我现在面临的障碍之一是两个摄像头的合并(他所描述的 here )。

起初,我尝试制作一个非矩形相机,但我认为如果不改变 HaxeFlixel 渲染方式的很多内容,这是不可能的。

然后我找到了alphaMask() FlxSpriteUtil 包中的函数,我认为这将是一个更好的解决方案。它不仅可以解决我的问题,它实际上还允许使用各种时髦形状的相机,您只需创建正确的 mask 即可!

但新的问题是我不知道如何(再次强调,如果可以在不更改 FlxCamera 的情况下)将其应用到相机。

在内部,FlxCamera 可能使用 FlxSprite,但仅限于 blit 渲染模式,而我处于图 block 渲染模式(尚未找到如何更改,不在我看来,这是一个足够好的解决方案),它使用 Flash Sprite 来代替,但我不知道如何处理它。

简而言之,您知道如何将 AlphaMask 应用于 FlxCamera 吗?或者另一种方式来实现我想要做的事情?

PS:如果你想看一下(丑陋且带有法语注释的)代码,就结束了here !

最佳答案

您可以将 FlxCamera 的内容渲染到 FlxSprite(尽管它确实需要基于渲染模式的条件代码)。 TurnBasedRPG tutorial game将其用于战斗屏幕中的波浪效果,请参阅CombatHUD.hx:

if (FlxG.renderBlit)
screenPixels.copyPixels(FlxG.camera.buffer, FlxG.camera.buffer.rect, new Point());
else
screenPixels.draw(FlxG.camera.canvas, new Matrix(1, 0, 0, 1, 0, 0));

下面是一个代码示例,使用它来创建 HaxeFlixel 形状的相机:

package;

import flixel.tweens.FlxTween;
import flash.geom.Matrix;
import flixel.FlxCamera;
import flixel.FlxG;
import flixel.FlxSprite;
import flixel.FlxState;
import flixel.graphics.FlxGraphic;
import flixel.system.FlxAssets;
import flixel.util.FlxColor;
import openfl.geom.Point;
using flixel.util.FlxSpriteUtil;

class PlayState extends FlxState
{
static inline var CAMERA_SIZE = 100;

var maskedCamera:FlxCamera;
var cameraSprite:FlxSprite;
var mask:FlxSprite;

override public function create():Void
{
super.create();

maskedCamera = new FlxCamera(0, 0, CAMERA_SIZE, CAMERA_SIZE);
maskedCamera.bgColor = FlxColor.WHITE;
maskedCamera.scroll.x = 50;
FlxG.cameras.add(maskedCamera);

// this is a bit of a hack - we need this camera to be rendered so we can copy the content
// onto the sprite, but we don't want to actually *see* it, so just move it off-screen
maskedCamera.x = FlxG.width;

cameraSprite = new FlxSprite();
cameraSprite.makeGraphic(CAMERA_SIZE, CAMERA_SIZE, FlxColor.WHITE, true);
cameraSprite.x = 50;
cameraSprite.y = 100;
cameraSprite.cameras = [FlxG.camera];
add(cameraSprite);

mask = new FlxSprite(FlxGraphic.fromClass(GraphicLogo));

var redSquare = new FlxSprite(0, 25);
redSquare.makeGraphic(50, 50, FlxColor.RED);
add(redSquare);
FlxTween.tween(redSquare, {x: 150}, 1, {type: FlxTween.PINGPONG});
}

override public function update(elapsed:Float):Void
{
super.update(elapsed);

var pixels = cameraSprite.pixels;
if (FlxG.renderBlit)
pixels.copyPixels(maskedCamera.buffer, maskedCamera.buffer.rect, new Point());
else
pixels.draw(maskedCamera.canvas);

cameraSprite.alphaMaskFlxSprite(mask, cameraSprite);
}
}

关于camera - 有没有办法将 alpha mask 应用于 FlxCamera?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48075991/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com