Hi, not sure if this was solved or not, but an old trick we used in C2 was to move the new card created if is overlapping another a few pixels to left or right until exits the overlap... so u can move it 5-10-20-50 px's around the overlapped card randomly, it would be much faster, and less hanging out.
Another way of doing it would be to create a dictionary or array, and save the positions that the cards are spawning at... and just spawn anywhere else but in those locations.
array thing might be to advanced and to complicated... but the 1st solution should work just fine, unless u want it to be pixel perfect, then 2nd mention would work better.
for the 1st solution, i given above, to work, you have to have the cards inside a familly lets say "familly cards" and then (C3 doesn't really need families to pick objects of the same kind, pretty neat, you can just directly pick same card item name top... forgot about that feature)use the overlap condition like so:
if object.card is overlapping object.card > subcondition > object.car.pick.top.instance> Action >setx.object.card to self.x +20
the above line would push the newly created card to the right of the old card that is below it.
consequently u could also, move the "famillyCards" when they are overlapped to a random +- Y position.
il do a C3 example in a bit, for the 1st suggestion, just i can't use famillies cause freeEdition limitations... but il use 2 different sprites.
random items, no grid placeholders example 1
Edit2: now if your game doesn't use the spawn like in my example, but u have like a limited grid layout to spawn in ... for example, a chess table like format... u can generate a grid pattern using a sprite give it a bolean lets say "isoverlap" and toggle it false or true when u generate cards in their position. and then u can check those grid items, if "isoverlap" then pick another one. this way u don't have cards moving around ... they spawn directly in a empty space. the array solution is similar to the grid pattern with items, as grid... but more in logic ... events etc... so u see why i think array is a bit harder to implement, however it might be the best solution, but lots of work on it, since ul have to add the position spawned at+ the offset distance to keep top left right and bottom when u create the new cards.