Stap 7: De tank animeren loopvlakken
Nadat ik de eerste beweging van de tank gaan, ging ik op naar de loopvlakken gedragen de manier waarop die ik wilde maken. In de eerste vertoning van het Wetboek had ik een instelling van elke-other pixel voor de loopvlakken--één pixel enerzijds, uit. Maar met sommige experimenten, vond ik dat een drie-pixel loopvlak (twee op, eenmalige) zag er beter uit.De tekening van de tank had om deze configuratie te starten, maar echt wat het betekende was dat ik alle de pixels van het loopvlak op naar de eerste (binnen de lange int-matrix), en vervolgens turn off veranderen kon elke derde pixel. Afhankelijk van de positie van de vergaarbak, modulo 3, zou ik een andere set van pixels uitschakelen.
De eerste eis, was echter dat het totale aantal pixels in het loopvlak een veelvoud van drie zijn. Anders zou de animatie overslaan punten hit.
Dus, ik heb gedefinieerd een aparte treadx locatie (niet echt een x-positie, meer als een teller die zou lus 0, 1, 2, 0, 1, 2,...) en op basis van haar waarden, zou ik uitzoeken die loopvlak bits uit te schakelen. In mijn tekening, zou dit alleen gebeuren in de onderste vier lijnen, die met "y"-waarden 4, 5, 6 en 7 corresponderen.
Aangezien de bits van het loopvlak van de tank waren allen op om te beginnen, kon ik de C XOR-functie gebruiken hen om uit te schakelen. Ik zou die wijziging toegepast op de lange ints voordat het zou worden verschoven naar de positie van 0..4 bitsgewijs verplaatsen, en dat, natuurlijk, gebeuren zou voordat de lange ints werden opgesplitst in bytes.
int treadx = 0; void loop {} deze sectie behandelt de loopvlak animatie
...
voor (int y = 0; y < 8; y ++)
{
... doen de andere verwerking van het torentje omhoog hier
schakelaar (treadx) {}
Case 0:
schakelaar (y) {}
Case 4:
lval ^ = 0x2cb0; breken;
Case 7:
lval ^ = 0x2490; breken;
}
breken;
Case 1:
schakelaar (y) {}
Case 4:
lval ^ = 0x1240; breken;
lval ^ = 0x36d0; breken;
Case 5:
lval ^ = 0x0008; breken;
Case 6:
lval ^ = 0x4000; breken;
Case 7:
lval ^ = 0x0920; breken;
}
breken;
Case 2:
schakelaar (y) {}
Case 4:
lval ^ = 0x0920; breken;
lval ^ = 0x1b60; breken;
Case 5:
lval ^ = 0x4000; breken;
Case 6:
lval ^ = 0x0008; breken;
Case 7:
lval ^ = 0x1240; breken;
}
breken;
}
... doen verschuiven van longs ints en byte verdeling hier
} / / einde voor elk van de acht lijnen
... de lcd.write en lcd.createChar gesprekken hier doen
++ treadx;
Als (treadx == 3) {treadx = 0;}
} / / einde lus functie