If the new image footprint is identical or smaller, and the old image is completely opaque then you can potentially just skip the
on replace part so that the new image "pops-in" while obscured by the old as soon as it's used with
show, and rely on the
on replaced behaviour to fade out the old image revealing the new.
The problem with crossfading sprites is that during the dissolve both the old and new images are transparent to some degree, which as you discovered means whatever is behind them will bleed through. Normal dissolves do not have this issue because they build the whole before and after frames, and then only dissolve one, while the other remains static and opaque.
If your images contain transparency then having the new image "pop-in" behind the old image before it dissolves doesn't work, as it's possible to immediately see it. To the best of my knowledge in such cases you just have to pick the option most palatable to yourself, be that going back to regular full frame dissolves or accepting that during the crossfade the backdrop will become visible, peaking as old and new images pass each other at 50% transparency.
Code: Select all
transform basicdissolve:
truecenter
on show:
alpha 0.0
linear 0.4 alpha 1.0
on hide:
linear 0.4 alpha 0.0
on replaced:
alpha 1.0
linear 0.4 alpha 0.0
label start:
scene
label .loop:
show expression Solid('f00', xysize=(300, 200)) at basicdissolve as box
'r'
show expression Solid('0f0', xysize=(300, 200)) at basicdissolve as box
'g'
show expression Solid('00f', xysize=(300, 200)) at basicdissolve as box
'b'
hide box
pause
jump .loop