Pixilang programming language
9912
Posts: 17 Joined: Sat Oct 15, 2016 8:09 pm
Post
by 9912 » Tue Oct 11, 2022 4:14 am
Hi, I'm learning to use Pixilang (with manual assistance
), however, when my code runs the EVT lines, it logs twice when pressing keys.
Code used:
Code: Select all
object_selected = 0
direction = "no angle"
selected_object = ""
fn sel_object($object_index){
logf("Selected object: %d\n",$object_index)
}
while 1
{
print(selected_object, (-WINDOW_XSIZE/2)+4, (WINDOW_YSIZE/2)-84, WHITE, TOP | LEFT)
while( get_event() ) {
if EVT[ EVT_TYPE ] == EVT_MOUSEBUTTONDOWN {
beginx = EVT[EVT_X]
beginy = EVT[EVT_Y]
doingTouch = 1
}
if EVT[ EVT_TYPE ] == EVT_MOUSEBUTTONUP {
endx = EVT[EVT_X]
endy = EVT[EVT_Y]
doingTouch = 0
swipe_angle = ( 180 * atan2(endy-beginy,endx-beginx) / M_PI ) * -1
sprintf( direction, "%d", swipe_angle )
if swipe_angle > -45 && swipe_angle <= 45 {
//left arrow
}
if swipe_angle > 45 && swipe_angle <= 135 {
//down arrow
}
if (swipe_angle > 135 && swipe_angle <= 180) || (swipe_angle > -180 && swipe_angle <= -135) {
//right arrow
}
if swipe_angle > -135 && swipe_angle <= -45 {
//up arrow
}
sel_object(object_selected)
}
if EVT[ EVT_KEY ] == 48 { sel_object(0) }
if EVT[ EVT_KEY ] == 49 { sel_object(1) }
if EVT[ EVT_KEY ] == 50 { sel_object(2) }
if EVT[ EVT_KEY ] == 51 { sel_object(3) }
if EVT[ EVT_KEY ] == 52 { sel_object(4) }
if EVT[ EVT_KEY ] == 53 { sel_object(5) }
if EVT[ EVT_KEY ] == 54 { sel_object(6) }
if EVT[ EVT_KEY ] == 55 { sel_object(7) }
if EVT[ EVT_KEY ] == 56 { sel_object(8) }
if EVT[ EVT_KEY ] == 57 { sel_object(9) }
if EVT[ EVT_KEY ] == KEY_LEFT {
object_selected = object_selected - 1
sel_object(object_selected)
}
if EVT[ EVT_KEY ] == KEY_RIGHT {
object_selected = object_selected + 1
sel_object(object_selected)
}
if EVT[ EVT_TYPE ] == EVT_QUIT { breakall }
sprintf( selected_object, "%d", object_selected )
}
frame(200)
}
9912
Posts: 17 Joined: Sat Oct 15, 2016 8:09 pm
Post
by 9912 » Tue Oct 11, 2022 8:00 pm
Workaround: creating a key_pressed variable with zero value and wrap a new if statement to check whenever key_pressed equals one to perform EVT actions:
Code: Select all
key_pressed = 0 //workaround for double key issue
object_selected = 0
direction = "no angle"
selected_object = ""
fn sel_object($object_index){
logf("Selected object: %d\n",$object_index)
}
while 1
{
print(selected_object, (-WINDOW_XSIZE/2)+4, (WINDOW_YSIZE/2)-84, WHITE, TOP | LEFT)
while( get_event() ) {
if EVT[ EVT_TYPE ] == EVT_MOUSEBUTTONDOWN {
beginx = EVT[EVT_X]
beginy = EVT[EVT_Y]
doingTouch = 1
}
if EVT[ EVT_TYPE ] == EVT_MOUSEBUTTONUP {
endx = EVT[EVT_X]
endy = EVT[EVT_Y]
doingTouch = 0
swipe_angle = ( 180 * atan2(endy-beginy,endx-beginx) / M_PI ) * -1
sprintf( direction, "%d", swipe_angle )
if swipe_angle > -45 && swipe_angle <= 45 {
//left arrow
}
if swipe_angle > 45 && swipe_angle <= 135 {
//down arrow
}
if (swipe_angle > 135 && swipe_angle <= 180) || (swipe_angle > -180 && swipe_angle <= -135) {
//right arrow
}
if swipe_angle > -135 && swipe_angle <= -45 {
//up arrow
}
sel_object(object_selected)
}
if EVT[ EVT_KEY ] {
if key_pressed == 0 {
key_pressed = 1 //when it is zero turn to one
}else{
key_pressed = 0 //when it is one turn to zero and perform EVT actions
if EVT[ EVT_KEY ] == 48 { sel_object(0) }
if EVT[ EVT_KEY ] == 49 { sel_object(1) }
if EVT[ EVT_KEY ] == 50 { sel_object(2) }
if EVT[ EVT_KEY ] == 51 { sel_object(3) }
if EVT[ EVT_KEY ] == 52 { sel_object(4) }
if EVT[ EVT_KEY ] == 53 { sel_object(5) }
if EVT[ EVT_KEY ] == 54 { sel_object(6) }
if EVT[ EVT_KEY ] == 55 { sel_object(7) }
if EVT[ EVT_KEY ] == 56 { sel_object(8) }
if EVT[ EVT_KEY ] == 57 { sel_object(9) }
if EVT[ EVT_KEY ] == KEY_LEFT {
object_selected = object_selected - 1
sel_object(object_selected)
}
if EVT[ EVT_KEY ] == KEY_RIGHT {
object_selected = object_selected + 1
sel_object(object_selected)
}
}
}
if EVT[ EVT_TYPE ] == EVT_QUIT { breakall }
sprintf( selected_object, "%d", object_selected )
}
frame(200)
}
It now works like hypothetically KEY_DOWN and KEY_UP events, still, more ideas are accepted.
maks
Posts: 43 Joined: Sat Mar 26, 2022 4:28 am
Post
by maks » Tue Oct 18, 2022 2:13 pm
Hi, I'm not sure I follow why you are not using the actual EVT_BUTTONDOWN and EVT_BUTTONUP events to get the up & down events?
Like so works for me:
Code: Select all
while (1) {
while( get_event() ) {
if EVT[ EVT_TYPE ] == EVT_BUTTONDOWN {
printf("key down %d \n", EVT[ EVT_KEY ])
}
if EVT[ EVT_TYPE ] == EVT_BUTTONUP {
printf("key up %d \n", EVT[ EVT_KEY ])
}
}
}