Stap 5: Shifting tekens op de pagina
Als u wilt verplaatsen van de tank, ik heb een pixel-wise x-positie voor loting gedefinieerd. Daar was ik omgaan met tekens die vijf pixels breed werden, ik kon doen een integer-divisie van de tank x positie om erachter te komen de waar vestig ik elk aangepast personage.Ik zou ook gewoon nemen een Restbepaling bij deling van de tank x positie (vergaarbak % 5) om erachter te komen hoe te verschuiven van de bits rond. Als de modulo was nul, ik zou trekken van de tekens en definiëren van de bits van de personages. Maar als de modulo werd niet-nul, het betekende dat de personages waren al op het scherm, en ik kon gewoon het herdefiniëren van de bits. Ik wil ook vestigen een voorloopspatie leeg voorafgaande tekening van aangepaste teken 0 (de meest linkse knop) wanneer ik "" van de tekens verhuizen was.
Dus, om te beginnen, zou ik het initialiseren van de positie van de vergaarbak aan een waarde die netjes door vijf zou verdelen.
int vergaarbak = -15;
int tankcharx;
int tankchary = 1;
Vervolgens, binnen de loop-functie, zou ik de divisie en de modulo om erachter te komen wat te trekken, en hoe te tekenen. (Pas op voor hoe de modulo voor negatieve getallen werkt.)
Een andere manier om dit te doen, achteraf, zou maken vergaarbak altijd niet-negatief, en verschuiving van de positie van het x-teken door -3 voor weergave.
Dit is het deel van de loop-code die de aangepaste tekens op het scherm krijgt. In een betere weergave van deze code verwerkt ik uit de tekenfuncties in een safeDrawCharAt functie die de positie check doet. Maar hier zie je de oudere uitlevering waar ik aan het doen was de positie van inline controleren. Aangezien de tekens kunnen te allen tijde scherm uit, moest ik doen een positie check voor eventuele setCursor() of write() oproepen.
tankcharx = vergaarbak / BITS_PER_CHAR;
Eerste uitlevering, geen rotatie van loopvlakken
Als ((tankx % BITS_PER_CHAR) == 0) {}
Volledige verschuiving is ingeschakeld, moet het tekenen van een leeg waar de tank was voor het laatst
Als (tankcharx > = 1) {}
lcd.setCursor (tankcharx-1, tankchary);
LCD.write(' ');
}
Als (tankcharx > = 0 & & tankcharx < = 7) {}
lcd.setCursor (tankcharx, tankchary);
LCD.write((byte)0);
}
Als (tankcharx + 1 > = 0 & & tankcharx + 1 < = 7) {}
lcd.setCursor (tankcharx + 1, tankchary);
LCD.write((byte)1);
}
Als (tankcharx + 2 > = 0 & & tankcharx + 2 < = 7) {}
lcd.setCursor (tankcharx + 2, tankchary);
LCD.write((byte)2);
}
Als (tankcharx + 3 > = 0 & & tankcharx + 3 < = 7) {}
lcd.setCursor (tankcharx + 3, tankchary);
LCD.write((byte)3);
}
}