Android的统一触摸阶段可能存在错误?

如何解决Android的统一触摸阶段可能存在错误?

我对团结还很陌生,一直在开发我的第一个Android游戏。大多数元素都可以正常运行,但是有一点不便,这使得玩游戏几乎是不可能的。我将尝试包括所有重要信息,并尽我所能进行解释。请原谅我的语法和英语水平都不高,因为它不是我的母语。

我的游戏名称是“距离!请”,它围绕保持与其他游戏对象之间的距离这一思想展开。这些字符称为“绒毛”,每个级别上都有特定数量的绒毛。角色具有脚本[RandomPatrol],可以在屏幕上随意移动。它们还具有DragAndDrop脚本,该脚本允许玩家拖动并更改绒毛的位置。

问题,但是,如果我拖动-松开'Fluff A',然后触摸'Fluff B',Fluff A会随机传送到FluffA的位置,导致崩溃因此有两个游戏对象,一个很大的“游戏结束”。这是某种故障,错误或硬件问题,我对此不太确定,因为它是随机发生的。有时它不会发生,您将能够轻松清除关卡,但有时它只会使您无法前进。

为了进一步说明我的情况,我在下面提供了一些图片,并且还提供了我上面提到的两个脚本。

Normal Touch and drag on Orange Fluff,executed as expected

After releasing orange I dragged red fluff. Worked as intended

After releasing red fluff I tried to drag blue fluff but the red one just moved over,as you can see by the Trail

DragAndDrop 代码

public class DragAndDrop : MonoBehavIoUr
{
    bool moveAllowed;
    Collider2D col;
    int flag;

    private GameMaster gm;

    private AudioSource audioSource;

    public GameObject selectEffect;
    public GameObject deathEffect;
    public GameObject electricDeath;
    public GameObject poisonDeath;
    public GameObject fireDeath;
    public GameObject frostDeath;

    void Start()
    {
        gm = GameObject.FindGameObjectWithTag("GM").GetComponent<GameMaster>();
        audioSource = GetComponent<AudioSource>();
        col = GetComponent<Collider2D>();
    }

    void Update()
    {
        if(Input.touchCount > 0 && !IsPointerOverUIObject())
        {
            Touch touch = Input.GetTouch(0);
            Vector2 touchPosition = Camera.main.ScreenToWorldPoint(touch.position);
            Collider2D touchedCollider = Physics2D.OverlapPoint(touchPosition);

            switch (touch.phase)
            {
                case TouchPhase.Began:
                    
                    if (col == touchedCollider)
                    {
                        Instantiate(selectEffect,transform.position,Quaternion.identity);
                        audioSource.Play();
                        //moveAllowed = true;
                        flag = 1;
                    }
                    break;

                case TouchPhase.Moved:
                    if (flag == 1)
                    {
                        transform.position = new Vector2(touchPosition.x,touchPosition.y);
                    }
                    break;

                case TouchPhase.Ended:
                    flag = 0;
                    //moveAllowed = false;
                    break;

                case TouchPhase.Canceled:
                    //moveAllowed = false;
                    flag = 0;
                    break;
            }
        }
    }

    private void OnTriggerEnter2D(Collider2D collision)
    {
        if (collision.tag == "Planet" || collision.tag == "Projectile")
        {
            Instantiate(deathEffect,Quaternion.identity);
            Destroy(gameObject);
            gm.GameOver();
        }
        if (collision.tag == "ElectricOrb")
        {
            Instantiate(electricDeath,Quaternion.identity);
            Destroy(gameObject);
            gm.GameOver();
        }
        if (collision.tag == "Spiky")
        {
            Instantiate(poisonDeath,Quaternion.identity);
            Destroy(gameObject);
            gm.GameOver();
        }
        if (collision.tag == "FireOrb")
        {
            Instantiate(fireDeath,Quaternion.identity);
            Destroy(gameObject);
            gm.GameOver();
        }
        if (collision.tag == "FreezeOrb")
        {
            Instantiate(frostDeath,Quaternion.identity);
            Destroy(gameObject);
            gm.GameOver();
        }
    }

RandomPatrol 代码

public class RandomPatrol : MonoBehavIoUr
{
    private float _speed;

    public float minSpeed = 1f;
    public float maxSpeed = 2f;

    public float minX = -8.15f;
    public float maxX = 8.15f;
    
    public float minY = -4.15f;
    public float maxY = 4.15f;

    public float secondsToMaxDifficulty = 50f;

    Vector2 targetPosition;

    void Start()
    {
        Time.timeScale = 1;
        targetPosition = GetRandomPosition();
    }

    void Update()
    {
        if((Vector2)transform.position != targetPosition)
        {
            _speed = Mathf.Lerp(minSpeed,maxSpeed,GetDifficultyPercent());
            transform.position = Vector2.Movetowards(transform.position,targetPosition,_speed * Time.deltaTime);
        }
        else
        {
            targetPosition = GetRandomPosition(); 
        }
    }

    Vector2 GetRandomPosition()
    {
        float randomX = Random.Range(minX,maxX);
        float randomY = Random.Range(minY,maxY);
        return new Vector2(randomX,randomY);
    }

    private float GetDifficultyPercent()
    {
        return Mathf.Clamp01(Time.timeSinceLevelLoad / secondsToMaxDifficulty);
    }

}

我已经尝试修复它,现在已经寻找解决方案4天了。任何帮助。我尝试在统一遥控器以及已安装的APK上播放它,问题仍然存在。

我们将不胜感激任何帮助,我们将非常乐意为您提供您可能需要/需要的任何其他信息。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?