我正在使用下面的代码根据点数创建带有线条渲染器的形状.对于大于3的点(三角形等),第一个和最后一个点不会像其他点那样关闭形状.
1.如何在没有任何可见间隙的情况下关闭超过3个点的形状?
2.如何设置形状的动画,以便在特定的持续时间内绘制线条(可能使用协程)?
public class CircleDrawing : MonoBehaviour
{
[Tooltip("The radius of the circle, measured in world units.")]
public float Radius = 2;
[Tooltip("The number of vertices in the circle.")]
public int Points = 5;
[Tooltip("The color of the circle.")]
public Color Color;
private LineRenderer lineRenderer;
public void Awake()
{
lineRenderer = gameObject.AddComponent<LineRenderer>();
lineRenderer.material = new Material(Shader.Find("Sprites/Default"));
lineRenderer.material.color = Color;
lineRenderer.startWidth = lineRenderer.endWidth = 0.5f;
lineRenderer.positionCount = Points + 1; //+1 to close the shape
Draw();
}
private …Run Code Online (Sandbox Code Playgroud) 从上图中,给定初始位置b0(x,y),b1(x,y)的结束位置和a(x,y)和c(x,y)的位置.如何在不与矩形A和C接触的情况下预先确定方形B0是否从b0(x,y)移动到b1(x,y)?我相信这个角度是必要的.
我想打断下面的序列2秒钟,然后恢复到最初没有中断的情况.
例如,从下面的代码中,如果我通过使精灵从序列的1.5 - 3.5秒可见而中断序列2秒(意味着hideInterval动作加上showSprite动作1 秒,并且showInterval动作将丢失0.5秒))中断将在showInterval动作剩余2.5秒时结束.如何让sprite在剩余的2.5秒内运行一个动作,并继续该点的正常序列.
请注意,这个例子是为了清楚起见,但我希望在中断后更通用的方法来恢复序列.
let hideSprite = SKAction.fadeAlpha(to: 0, duration: 0.5)
let showSprite = SKAction.fadeAlpha(to: 100, duration: 0.5)
let hideInterval = SKAction.wait(forDuration: 2)
let showInterval = SKAction.wait(forDuration: 3)
let spriteSequence = SKAction.sequence([hideSprite, hideInterval, showSprite, showInterval])
sprite.runAction(SKAction.repeatForever(spriteSequence))
Run Code Online (Sandbox Code Playgroud)
UPDATE
我认为下面的图表将使我的问题更容易理解,并进一步解释我想要通过中断序列实现的目标.
我已经实现了单点和双击。但是,每当我双击屏幕时,也会运行一次点击代码。请参见下面的代码:
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
let touch = touches.first as UITouch!
let touchLocation = touch?.location(in: self)
let touchedNode = self.atPoint(touchLocation!)
if touch?.tapCount == 1 {
print("single tap")
if let name = touchedNode.name {
if name == "enemySprite"
{
//handle single Tap
}
}
}
if touch?.tapCount == 2 {
print("double tap")
if let name = touchedNode.name {
if name == "enemySprite"
{
//handle double Tap
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
如何使每个水龙头计数互斥?
更新
根据Apurv的回答和Whirlwind的评论,我认为以下代码可以正常工作。
override func didMove(to …Run Code Online (Sandbox Code Playgroud)