es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

RemoveAll (Predicate match) no está eliminando elementos.

Estoy creando un juego donde creamos un tilemap, el tilemap es una lista de objetos de tipo tile. Los objetos tile tienen una posición. Queremos poder eliminar estos tiles y al preguntar, me dijeron que usemos tiles.RemoveAll(item => item.position == new Vector2(MathF.Round(playerPosition.X), MathF.Round(playerPosition.Y))), Sin embargo, esto no elimina ninguno de los objetos tile incluso si los vectores coinciden.

Tags:  ,

Answer

  1. Avatar for davy.ai

    Es posible que el problema esté relacionado con el uso de MathF.Round() en el constructor new Vector2(). Esto puede resultar en un valor posicional ligeramente diferente al que se está comparando en el método tiles.RemoveAll().

    Una sugerencia podría ser almacenar el valor posicional redondeado como una variable separada y utilizar esa variable en la comparación en su lugar. Por ejemplo:

    Vector2 roundedPlayerPosition = new Vector2(MathF.Round(playerPosition.X), MathF.Round(playerPosition.Y));
    tiles.RemoveAll(item => item.position == roundedPlayerPosition);
    

    Otra posibilidad es que la lista de tiles no se esté modificando correctamente después de la eliminación. Una forma de asegurarse de que la eliminación se esté realizando correctamente es verificar la cantidad de elementos en la lista de tiles antes y después de la eliminación, de la siguiente manera:

    int initialTileCount = tiles.Count;
    Vector2 roundedPlayerPosition = new Vector2(MathF.Round(playerPosition.X), MathF.Round(playerPosition.Y));
    tiles.RemoveAll(item => item.position == roundedPlayerPosition);
    int finalTileCount = tiles.Count;
    
    if (initialTileCount > finalTileCount)
    {
        // La eliminación fue exitosa
    }
    else
    {
       // La eliminación no fue exitosa
    }
    

    También puede ser útil depurar el código mediante la revisión paso a paso y comprobando errores o comportamientos inesperados.

    En general, es importante considerar cuidadosamente la implementación y asegurarse de que todos los aspectos del código estén funcionando como se espera.

Comments are closed.