gpt4 book ai didi

安卓游戏: Drag one image at a time into screen from a group of images

转载 作者:太空宇宙 更新时间:2023-11-03 12:50:10 25 4
gpt4 key购买 nike

我在屏幕底部堆叠了 5 张图像。我的游戏目的是拖动这些图像并在特定条件下将它们连接起来。(有点像拼图游戏)我使用了以下代码

var touchListener = new CCEventListenerTouchAllAtOnce ();
touchListener.OnTouchesEnded = OnTouchesEnded;
touchListener.OnTouchesMoved = HandleTouchesMoved;
AddEventListener (touchListener, this);
void HandleTouchesMoved (List touches, CCEvent touchEvent)
{
foreach(var tap in touches)
{
var locationOnScreen = tap.Location;
alarmicSprite.PositionY = locationOnScreen.Y;
alarmicSprite.PositionX = locationOnScreen.X;
pressSwitchSprite.PositionY = locationOnScreen.Y;
pressSwitchSprite.PositionX = locationOnScreen.X;
}
}

此代码一次将所有图像移动到触摸的坐标。我的要求是一次拖动一个图像,而不是一次拖动所有图像。在我看来,Xamarin 和 Github 中提供的 Cocossharp API 和教程并没有多大帮助。有没有一种方法可以在一个触摸实例上拖动一个图像?帮助表示赞赏

最佳答案

这是一个示例,它创建了两个 Sprite 并让您单独拖动它们。

设计:

  • 你需要检测哪个 Sprite 被触摸,然后只移动那个 Sprite 。
  • 在 OnTouchesBegan 中保存被触摸的 Sprite
  • 在 OnTouchesMoved 中移动当前触摸的 Sprite

注意事项:

  • OnTouchesBegan 为注册该事件的每个 Sprite 调用一次。所以如果20个 Sprite 添加监听器,OnTouchesBegan事件被调用20次(除非被吞噬,见下文)
  • 您可以通过编程方式确定触摸位置是否在调用 OnTouchesBegan 的 Sprite 的边界框内。然而,“吞下”触摸将停止任何剩余的排队调用。要下咽,只需返回 true。
  • 一旦找到感兴趣的 sprite,就返回 true 以“吞下”触摸事件并阻止其余 sprite 回调。这可以节省 CPU 并更快地执行您的 OnTouchesMoved。在完全处理完 OnTouchesBegan 之前,系统不会调用 OnTouchesMoved。

    CCSprite currentSpriteTouched;
    CCSprite Sprite1;
    CCSprite Sprite2;
    protected override void AddedToScene()
    {
    base.AddedToScene();

    // Use the bounds to layout the positioning of our drawable assets
    CCRect bounds = VisibleBoundsWorldspace;

    Sprite1 = new CCSprite("redball.png");
    Sprite2 = new CCSprite("blueball.png");

    Sprite1.Position = bounds.Center;
    Sprite2.Position = bounds.Center;
    AddChild(Sprite1);
    AddChild(Sprite2);

    // Register for touch events
    var touchListener = new CCEventListenerTouchOneByOne();
    touchListener.IsSwallowTouches = true;
    touchListener.OnTouchBegan = this.OnTouchesBegan;
    touchListener.OnTouchMoved = this.OnTouchesMoved;

    AddEventListener(touchListener, Sprite2);
    AddEventListener(touchListener.Copy(), Sprite1);

    }


    void OnTouchesMoved(CCTouch touch, CCEvent touchEvent)
    {
    if (currentSpriteTouched != null)
    {
    currentSpriteTouched.Position = touch.Location;
    }
    }

    bool OnTouchesBegan(CCTouch touch, CCEvent touchEvent)
    {
    // This is called once for each sprite
    // To stop the remaining sprites from calling,
    // "swallow" the touch by returning true
    CCSprite caller = touchEvent.CurrentTarget as CCSprite;
    currentSpriteTouched = null;
    if (caller == Sprite1)
    {
    if (Sprite1.BoundingBoxTransformedToWorld.ContainsPoint(touch.Location))
    {
    System.Diagnostics.Debug.WriteLine("Sprite 1 touched ");
    currentSpriteTouched = Sprite1;
    return true; // swallow
    }
    else
    {
    return false; // do not swallow and try the next caller
    }

    }
    else if (caller == Sprite2)
    {
    if (Sprite2.BoundingBoxTransformedToWorld.ContainsPoint(touch.Location))
    {
    currentSpriteTouched = Sprite2;
    System.Diagnostics.Debug.WriteLine("Sprite 2 touched ");
    return true; // swallow
    }
    else
    {
    return false; // do not swallow and try the next caller
    }
    }
    else
    {
    // something else touched
    System.Diagnostics.Debug.WriteLine("Something else was touched");
    return false; // Do not swallow
    }
    }

关于安卓游戏: Drag one image at a time into screen from a group of images,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33168953/

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