有没有办法将alpha蒙版应用于FlxCamera?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了有没有办法将alpha蒙版应用于FlxCamera?相关的知识,希望对你有一定的参考价值。
我正在尝试实施this camera,但我现在面临的障碍之一是两台摄像机的合并(他描述的是here)。
起初我尝试制作一个非矩形相机,但我认为如果不改变HaxeFlixel呈现方式的很多东西是不可能的。
然后我在alphaMask()
包中找到了FlxSpriteUtil
函数,我认为这将是一个更好的解决方案。它不仅可以解决我的问题,它实际上允许各种时髦形状的相机,你只需要创建正确的面具!
但是新的问题是我不知道如何(再次,如果可能不改变一点FlxCamera
)将它应用到相机。
在内部,FlxCamera
可能使用FlxSprite
,但只在blit渲染模式,我在瓷砖渲染模式(没有找到如何更改,在我看来不够好的解决方案),它使用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);
}
}
以上是关于有没有办法将alpha蒙版应用于FlxCamera?的主要内容,如果未能解决你的问题,请参考以下文章