Moin,
ich brauche mal einen Denkanstoß für meine Routinen:
Routine 1: Animation. Hier werden nur die Koordinaten aus einer Tabelle gelesen und für alle Sprites gesetzt.
Code
moveSprites:
ldx spr_Pointer
ldy #$00
!loop:
lda spr_Sinus,x
sta $d001,y
txa
clc
adc spr_SinusOffset
tax
iny
iny
cpy #$0f
bcc !loop-
inc spr_Pointer
rts
Alles anzeigen
Routine 2: Farbwechsel. Die Sprites sollen blinken, wenn sie eine bestimmte Y-Koordinate (Label "spr_BorderBottom") erreicht haben. Bisher ist das für jedes Sprite einzeln realisiert:
Code
checkFlash:
// Sprite 0
lda cfl_Spr_0_Active+1
bne cfl_Spr_0_Active
lda $d001
cmp spr_BorderBottom
bne !skip+
lda #$01
sta cfl_Spr_0_Active+1
cfl_Spr_0_Active:
lda #$00
beq cfl_Spr_1
ldx cfl_Spr_0_ColPntr
lda spr_FlashColors,x
bmi cfl_Spr_0_Reset
sta $d027
inc cfl_Spr_0_ColPntr
!skip:
bpl cfl_Spr_1
cfl_Spr_0_Reset:
lda #$00
sta cfl_Spr_0_ColPntr
sta cfl_Spr_0_Active+1
// ******************************************
// Sprite 1
cfl_Spr_1:
lda cfl_Spr_1_Active+1
bne cfl_Spr_1_Active
lda $d003
cmp spr_BorderBottom
bne !skip+
lda #$01
sta cfl_Spr_1_Active+1
cfl_Spr_1_Active:
lda #$00
beq cfl_Spr_2
ldx cfl_Spr_1_ColPntr
lda spr_FlashColors,x
bmi cfl_Spr_1_Reset
sta $d028
inc cfl_Spr_1_ColPntr
!skip:
bpl cfl_Spr_2
cfl_Spr_1_Reset:
lda #$00
sta cfl_Spr_1_ColPntr
sta cfl_Spr_1_Active+1
// ******************************************
Sprite 2 ...
Alles anzeigen
Nun meine Frage: Kann man das nicht irgendwie in einer Schleife erledigen? Das Problem ist, daß jedes Sprite seinen eigenen Pointer auf die Farbtabelle braucht, sonst blinken ja alle im gleichen Rhythmus. So wie es jetzt ist, funktioniert es zwar, ist aber nicht schön programmiert...