Prioridad de selección de ImageSprites (coordenada Z) / Selection Priority of ImageSprites (Z Coordinate)

:ceuta_and_melilla::uk:

:ceuta_and_melilla:
Hola tengo una duda. Estoy empezando a usar MIT app inventor y en la aplicación que estoy haciendo (una especie de puzle) tengo un problema que no sé si vosotros me podréis solucionar :).
Adjunto la imagen para que podáis visualizar mi problema. Primero os voy a explicar el contexto: tengo 2 piezas de puzle (SpriteImages) en un Canvas. A las piezas de puzle las he "dicho" que cuando sean arrastradas que sigan a las coordenadas del puntero/dedo. Además para evitar que se junten (El spriteCannibalism o algo así) he añadido una variable (Pieza activa) y he mandado que se inicie en 0, que cuando una pieza se arrastre tome el valor de la pieza (si es la pieza 1, pues el 1...)siempre y cuando el valor de la pieza sea 0, y que cuando cualquier ImageSprite se suelte(touchUp) se vuelva la variable a 0. Entoces cada SpriteImage solo se va a mover si la variable está en su valor.
Ahora sí, el problema es el siguiente, tengo 2 piezas de puzle superpuestas, la roja y la azul de la imagen por ejemplo, estando la roja en Z=1 y la azul en Z=2 (es decir la azul encima), y yo si toco en un punto medio en que toco a las 2 piezas (cruz verde) en vez de coger la pieza azul, que sería lo intuitivo por estar más arriba, agarra primero la de abajo, la roja. Imagino que MIT app inventor funcionará de esta manera, que lee de las Z's más bajas a altas.
No sé si se puede cambiar la forma en la que funciona MIT app inventor para que lea primero las capas de arriba y luego las de abajo o si tendré que usar listas (que no sé muy bien cómo funcionan) para asignar prioridades a las piezas de Z's más altas... Espero que me podáis guiar un poco y gracias de antemano :).

:uk:
Hello, I have a question. I'm starting to use MIT App Inventor, and in the application I'm working on (a kind of puzzle), I've encountered a problem that I hope you might help me solve :).
I've attached an image to help illustrate my issue. But first, let me explain the context: I have two puzzle pieces (ImageSprites) on a Canvas. I've programmed the puzzle pieces to follow the pointer/finger coordinates when they are dragged. To prevent them from overlapping or "sprite cannibalism" (where one sprite overtakes another), I've added a variable called ActivePiece. This variable is initially set to 0. When a piece is dragged, the variable takes on the value of the piece (e.g., 1 for the first piece), as long as the ActivePiece variable is currently 0. Once any ImageSprite is released (TouchUp), the variable is reset to 0. This way, each ImageSprite only moves if the ActivePiece variable corresponds to its value.
Now, here’s the problem: I have two overlapping puzzle pieces, let’s say the red piece at Z=1 and the blue piece at Z=2 (with the blue piece on top). When I touch a point where both pieces overlap (indicated by the green cross in the image), instead of selecting the blue piece (which is intuitively on top), it grabs the red piece underneath. I assume that MIT App Inventor processes ImageSprites from lower to higher Z-index values.
Is there a way to change how MIT App Inventor prioritizes sprites, so it selects the ones with a higher Z-index first? Or would I need to use lists (which I'm not very familiar with) to manage the priorities of the higher Z-index pieces? I would really appreciate any guidance you can offer. Thanks in advance!

Here's how to do it:

from

Thank you for your response, but I think my issue isn't exactly what you tried to resolve. I've already solved the SpriteCannibalism problem. The issue, my question, is that when I touchdown on two overlapping pieces (as shown in the image), only one piece is dragged (because SpriteCannibalism is solved), but it drags the piece that is lower down (with a lower Z cord.), which creates a very strange and unintuitive effect (the upper sprite should be dragged instead). That's why I'm asking for help :slight_smile:

I am unable to replicate your issue. Try this:
twoSprites.aia (255.3 KB)

Thank you very much! That project solves my issue. I'll try to apply it to my project.

Be good to understand what was happening in your project

This topic was automatically closed 7 days after the last reply. New replies are no longer allowed.