我试图制作一款可以拍摄在空中随机移动的浮动灯的游戏。在游戏中将有3个不同的盒子,你可以放置浮动灯,所以也将有3种不同的灯。
灯光正常工作,我可以按照自己的意愿拖动它们。
我的问题是如何抓住它们并重新产生它们。我想使用您在kill()
中找到的flixel.FlxNapeSprite
方法。
当你抓住它们时,你应该把它们移到正确的盒子里,当它们进入盒子里时,它们会被杀死,你会得到分数,并且会产生新的随机光线。
到目前为止如何杀死某个区域内的灯光对象?
答案 0 :(得分:2)
我猜这些方框也是FlxNapeSprite
个?通常,您可以在此处设置碰撞回调,只要两个颈背体的碰撞盒重叠(在这种情况下为灯光和方框),就会调用此回调。您可以使用napeDebugEnabled = true
或按flixel调试器叠加层右上角的“N”按钮显示颈背体。
这是一个如何使用Flixel + Nape设置简单碰撞回调的简单示例:
package;
import flixel.addons.nape.FlxNapeSprite;
import flixel.addons.nape.FlxNapeState;
import flixel.util.FlxColor;
import nape.callbacks.CbEvent;
import nape.callbacks.CbType;
import nape.callbacks.InteractionCallback;
import nape.callbacks.InteractionListener;
import nape.callbacks.InteractionType;
import nape.phys.BodyType;
using flixel.util.FlxSpriteUtil;
class PlayState extends FlxNapeState
{
override public function create()
{
super.create();
bgColor = FlxColor.BLACK;
napeDebugEnabled = true;
var light = new Light(10, 10);
var box = new Box(10, 100);
add(light);
add(box);
light.body.velocity.y = 200;
FlxNapeState.space.listeners.add(new InteractionListener(
CbEvent.BEGIN,
InteractionType.COLLISION,
Light.CB_TYPE,
Box.CB_TYPE,
collideLightBox));
}
function collideLightBox(callback:InteractionCallback)
{
var light:Light = cast callback.int1.castBody.userData.sprite;
light.kill();
}
}
class Light extends FlxNapeSprite
{
public static var CB_TYPE(default, null) = new CbType();
public function new(x:Float, y:Float)
{
super(x, y);
makeGraphic(10, 10, FlxColor.TRANSPARENT);
var radius = 5;
drawCircle(5, 5, radius, FlxColor.WHITE);
createCircularBody(radius);
body.cbTypes.add(CB_TYPE);
// we need this to get the Light instance in the callback later
body.userData.sprite = this;
}
}
class Box extends FlxNapeSprite
{
public static var CB_TYPE(default, null) = new CbType();
public function new(x:Float, y:Float)
{
super(x, y);
makeGraphic(100, 50, FlxColor.GREEN);
createRectangularBody(width, height);
body.cbTypes.add(CB_TYPE);
body.type = BodyType.STATIC;
}
}
请务必查看官方FlxNape演示。 Nape website还有一些非常有用的示例+文档。