C#トレーニング2019-10-23第7課ブロック移動Form制御ブロック前後運動解決方案
一、私の考え:二つの部分に分けて実現します.
1、20番目のブロックが移動する前に:まず第1回:第1のブロックが移動する;まず2回目のトリガ:1番目と2番目のブロックの移動;まず3回目のトリガ:1番目の2番目の3番目のブロックの移動;このように推す.
2、すべてが移動し続ける:一度トリガし、すべてのブロックがトリガする.
具体的なコードは以下の通りです.
二、解決策:実は自身の
1、20番目のブロックが移動する前に:まず第1回:第1のブロックが移動する;まず2回目のトリガ:1番目と2番目のブロックの移動;まず3回目のトリガ:1番目の2番目の3番目のブロックの移動;このように推す.
2、すべてが移動し続ける:一度トリガし、すべてのブロックがトリガする.
具体的なコードは以下の通りです.
void m_tmr1_Tick( object sender, EventArgs e )
{
// 1、Delay trigger by PositionIndex
if( m_PositionIndex < m_nObjectNumber ) {
for( int i = 0; i <= m_PositionIndex; i++ ) {
EventCenter.Move( m_AllObjtctDirectionArray[ i ], i );
}
}
// 2、All blocks keep moving after trigger
if( m_PositionIndex > m_nObjectNumber - 1 ) {
for( int i = 0; i <= m_nObjectNumber - 1; i++ ) {
EventCenter.Move( m_AllObjtctDirectionArray[ i ], i );
}
}
}
二、解決策:実は自身の
m_PositionIndex
自体が旗印であり、それを利用してどのブロックを直接制御することができ、m_PositionIndex
が小さいと、それとそれ以前のブロックを移動し、このように順序動作の目的を実現した. void m_tmr1_Tick( object sender, EventArgs e )
{
for( int i = 0; i <= m_PositionIndex; i++ ) {
EventCenter.Move( m_AllObjtctDirectionArray[ i ], i );
}
if( m_PositionIndex < m_nObjectNumber-1 ) {
m_PositionIndex++;
}
}