다음 글을 썼습니다 만, 하나의 문자 (문자 디스플레이) 대신 단일 픽셀 (그래픽 디스플레이)에 맞도록 수정 한 후에 이해하지 못합니다.이 알고리즘을 이해하고 해결할 수 있도록 도와주세요.
XRES x YRES는 각 문자의 픽셀 해상도입니다. LCDGraphic
은이 값을 기반으로 고유 한 문자를 그립니다. 이 전환 알고리즘의 아이디어는 오른쪽, 왼쪽 또는 (양쪽 모두) 오른쪽으로 한 줄 이동하고 다음 줄을 누른 다음 오른쪽으로 이동할 수 있다는 것입니다. 텍스트 버전은 예상대로 작동하지만 번역을 위해 그래픽 디스플레이, 그것은 이상한 행동.
LCOLS
은 256 (sentinal)이며 이 실행될 때마다이 센티넬까지 transition_tick_
이 증가합니다. 따라서 col
은 0-255 사이의 범위 일 수 있습니다. 음, 픽셀이 좌우로 움직일 때, 그들은 함께 움직여야합니다. 그러나 어떤 이유로 든 오른쪽으로 이동하는 줄이 끝날 때까지 이동 한 다음 줄이 끝날 때까지 왼쪽으로 이동합니다. col
이 < 128
이고 왼쪽 이동 라인이 조정되는 경우 col
이 >= 128
인 경우 오른쪽 이동 라인이 조정됩니다. 나는 이것으로 꽤 혼란 스럽다.
void LCDGraphic::Transition() {
int direction = visitor_->GetDirection();
int col;
transitioning_ = true;
for(unsigned int row = 0; row < LROWS/YRES; row++) {
if(direction == TRANSITION_LEFT ||
(direction == TRANSITION_BOTH && row % 2 == 0))
col = LCOLS - transition_tick_;
else if(direction == TRANSITION_RIGHT || direction == TRANSITION_BOTH)
col = transition_tick_;
else
col = 0;
if(col < 0)
col = 0;
for(unsigned int i = 0; i < YRES; i++) {
int n = row * YRES * LCOLS + i * LCOLS;
for(unsigned int l = 0; l < 1; l++) {// LAYERS; l++) {
RGBA tmp[LCOLS];
memcpy(tmp + XRES, GraphicFB[l] + n + col + XRES, (LCOLS - col) * sizeof(RGBA));
for(unsigned j = 0; j < XRES; j++)
tmp[j] = NO_COL;
memcpy(GraphicFB[l] + n + col, tmp, sizeof(RGBA) * (LCOLS - col));
}
}
}
transition_tick_+=XRES;
if(transition_tick_ >= (int)LCOLS) {
transitioning_ = false;
transition_tick_ = 0;
emit static_cast<LCDEvents *>(
visitor_->GetWrapper())->_TransitionFinished();
}
GraphicBlit(0, 0, LROWS, LCOLS);
}
"다음과 같이 썼지 만 이해가되지 않습니다."- 이해하지 못한다면 어떻게 쓸 수 있습니까? –
필자는 먼저 "목록"이 다루기가 매우 쉬운 Python으로 작성했습니다. 나는 그것을 밖으로 알아낼 조금 운을 .다. 작은 시행 착오가 먼 길을 간다. – Scott
내가 이해하지 못하는 이유는 오른쪽이나 왼쪽으로 갈지라도 첫 번째 글자가 비어있는 이유입니다. 내가 말했듯이, 시행 착오. 나는 그것이 그 일을하기를 기대하지 않았고, 그것이 효과가있을 때, 나는 그것을 홀로 남겨 두었습니다. 나는 그 때보다 훨씬 더 많이 이해하지만,이 특별한 문제는 나에게 혼란을 주었다. 나는 아직도 왜 그렇게했는지 이해하지 못합니다. 프로그래머로서의 약점입니다. 나는 dyscalculia를 가지고 있으며, 어떤 문제는 저를 넘어갑니다. 나는 문제에 대해 반추하고 결국 그것을 얻는다. – Scott