сделал две ревизии кода
первый вариант читается проще
Code: Select all
brushSize = 2
screen = get_screen()
xsize = get_xsize(screen)
ysize = get_ysize(screen)
drawEnabled = 0
while(1)
{
print("Press left/right/up/down with up to 3 fingers", 0, -ysize / 2 + 8, WHITE)
frame()
while(get_event())
{
if (EVT [EVT_TYPE] == (EVT_MOUSEBUTTONDOWN)) | (EVT [EVT_TYPE] == (EVT_MOUSEBUTTONUP)) | (EVT [EVT_TYPE] == (EVT_MOUSEMOVE)) |
(EVT [EVT_TYPE] == (EVT_TOUCHBEGIN)) | (EVT [EVT_TYPE] == (EVT_TOUCHEND)) | (EVT [EVT_TYPE] == (EVT_TOUCHMOVE))
{
if EVT [EVT_TYPE] == (EVT_MOUSEBUTTONDOWN) {drawEnabled = 1} // enable drawing (for compatibility with non-multitouch devices)
if EVT [EVT_TYPE] == (EVT_MOUSEBUTTONUP) {drawEnabled = 0} // disable drawing
scancode = EVT [EVT_SCANCODE]
x = EVT [EVT_X]
y = EVT [EVT_Y]
if (drawEnabled == 1){
if (scancode == 0)// for first touch
{
drawBrush(x, y, WHITE)
}
if (scancode == 1) // for second touch
{
drawBrush(x, y, RED)
}
if (scancode == 2) // for third touch
{
drawBrush(x, y, YELLOW)
}
}
}
if EVT [EVT_TYPE] == EVT_QUIT {halt}
}
}
fn drawBrush( $x, $y, $color )
{
fbox($x, $y, brushSize, brushSize, $color)
}
во втором попытался вынести определение интерактивного события в отдельный метод дабы избавиться от кучи if, но блин, получилось даже более громоздко:
Code: Select all
EVENTS_NUM = 6
EVENT_TYPES = new (EVENTS_NUM)
EVENT_TYPES[0] = EVT_MOUSEBUTTONDOWN
EVENT_TYPES[1] = EVT_MOUSEBUTTONUP
EVENT_TYPES[2] = EVT_MOUSEMOVE
EVENT_TYPES[3] = EVT_TOUCHBEGIN
EVENT_TYPES[4] = EVT_TOUCHEND
EVENT_TYPES[5] = EVT_TOUCHMOVE
brushSize = 2
screen = get_screen()
xsize = get_xsize(screen)
ysize = get_ysize(screen)
drawEnabled = 0
while(1)
{
print("Press left/right/up/down with up to 3 fingers", 0, -ysize / 2 + 8, WHITE)
frame()
while(get_event()) {
if (isInteractiveEvent == 1) {
if EVT [EVT_TYPE] == (EVT_MOUSEBUTTONDOWN) {drawEnabled = 1} // enable drawing (for compatibility with non-multitouch devices)
if EVT [EVT_TYPE] == (EVT_MOUSEBUTTONUP) {drawEnabled = 0} // disable drawing
if (drawEnabled == 1) {
// for first touch
if (EVT [EVT_SCANCODE] == 0) {
drawBrush(EVT [EVT_X], EVT [EVT_Y], WHITE)
}
// for second touch
if (EVT [EVT_SCANCODE] == 1) {
drawBrush(EVT [EVT_X], EVT [EVT_Y], RED)
}
// for third touch
if (EVT [EVT_SCANCODE] == 2) {
drawBrush(EVT [EVT_X], EVT [EVT_Y], YELLOW)
}
}
}
if EVT [EVT_TYPE] == EVT_QUIT {halt}
}
}
fn drawBrush( $x, $y, $color )
{
fbox($x, $y, brushSize, brushSize, $color)
}
fn isInteractiveEvent()
{
$i = 0
while( $i < EVENTS_NUM ){
if (EVT [EVT_TYPE] == EVENT_TYPES[$i] ) {
ret(1)
}
$i+1
}
ret(0)
}
а все потому, что я не нашел как узнать длинну массива(контейнера), ну и жаль что нельзя написать так для более краткого вида:
Code: Select all
EVENT_TYPES = [EVT_MOUSEBUTTONDOWN, EVT_MOUSEBUTTONUP, EVT_MOUSEMOVE, EVT_TOUCHBEGIN, EVT_TOUCHEND, EVT_TOUCHMOVE]
уверен, можно еще улучшить )