Issue: Double keyboard pressing

Pixilang programming language
Post Reply
9912
Posts: 17
Joined: Sat Oct 15, 2016 8:09 pm

Issue: Double keyboard pressing

Post by 9912 »

Hi, I'm learning to use Pixilang (with manual assistance :D ), 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

Re: Issue: Double keyboard pressing

Post by 9912 »

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

Re: Issue: Double keyboard pressing

Post by maks »

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 ])
             }

        }
}
Post Reply