Navigation

    Fuze Arena Logo
    • Register
    • Login
    • Search
    • Categories
    • Recent
    • Popular
    • Users
    • Groups
    • Help
    • Discord

    How can i draw an image and make it selectable (example a play button)

    Beginners
    4
    11
    922
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • pianofire
      pianofire Fuze Team last edited by

      It is difficult to say without seeing the error(s).

      I made a simple touch screen button here: https://fuzearena.com/forum/topic/1097/touch-state

      1 Reply Last reply Reply Quote 1
      • T
        TwentyVyrus last edited by

        ok thanks ill wait for more answers for the joy cons / selecting

        1 Reply Last reply Reply Quote 0
        • Dave
          Dave Fuze Team last edited by pianofire

          @TwentyVyrus From looking at the way you've written the drawImage function, you'll run into some problems.

          The simplest way of doing drawImage is this:

          drawImage( handle, x, y, scale ) (scale is the multiplier to increase/decrease the size of the image). For example:

          image = loadImage("play button")
          loop
          drawImage(image, 0, 0, 1) // this will draw the image at the actual size of the image
          update()
          repeat
          
          image = loadImage("play button")
          loop
          drawImage(image, 0, 0, 4) // this will draw the image 4 times larger
          update()
          repeat
          

          The way you've done it with vectors is a bit more complicated. The first vector is the source region (the area of the image you want to draw from), and the second vector is the destination (the place on screen you want to draw it).

          They are both 4-dimensional vectors of {x, y, width, height}

          To make your image display at the regular size, you would need to know the width and height of your image. You can get them with imageSize() like this:

          image = loadImage("play button")
          size = imageSize(image) // this now gives us the width in 'size.x' and the y in 'size.y'
          scale = 4
          
          loop
          drawImage(image, {0, 0, size.x, size.y}, {0, 0, size.x * scale, size.y * scale)
          update()
          repeat
          

          Hope this helps!

          1 Reply Last reply Reply Quote 2
          • T
            TwentyVyrus last edited by

            thanks i think it works now but i was also trying to make it so if you press down a new image called select which is a white box to thicken the outline of the box you have selected but it either flashes when i clear() or it just plain doesnt work so i want a way to make it move or delete then copy in a different postition without making it flash

            1 Reply Last reply Reply Quote 0
            • pianofire
              pianofire Fuze Team last edited by pianofire

              Sorry I don't understand the last part but to get a different image you need to keep track of the button's state. So something like

              selected = false
              loop
                clear()
                if selected then
                  drawImage( selected, ...)
                else
                  drawImage( notselected, ...)
                endif
                // some code to change the selected state
                update()
              repeat
              
              T 1 Reply Last reply Reply Quote 2
              • pianofire
                pianofire Fuze Team last edited by pianofire

                A simple button control that works with touch screen or joy-con
                Share Code : NX35Y9NDNN

                button.png

                // A simple button control that works with touch screen or joy-con
                // author:  pianofire
                
                struct buttonControl
                	string label
                	vector size	
                	vector pos
                	vector extent
                	int focused
                	vector colour
                	vector labelColour
                	int labelHeight
                	vector labelOffset
                endstruct
                
                buttonControl buttons = getButtons()
                
                function main()
                    int count = 0
                	int start = 0
                	var oldc = controls( 0 )
                	loop
                		clear()
                		c = controls( 0 )
                		printat( 0, 0, "Use cursors to select button and A to press")
                		int focused = getFocused( buttons )
                		if (c.left and !oldc.left) or (c.up and !oldc.up) then
                			changeFocused( focused, -1 )
                		endif
                		if (c.right and !oldc.right) or (c.down and !oldc.down)then
                			changeFocused( focused, 1 )
                		endif
                		drawButtons( buttons )
                		if buttonPressed( buttons[0] ) or (buttons[0].focused and c.a) then
                			start = true
                		endif
                		if buttonPressed( buttons[1] ) or (buttons[1].focused and c.a) then
                			start = false
                		endif
                		if buttonPressed( buttons[2] ) or (buttons[2].focused and c.a) then
                			count = 0
                		endif
                		if start then
                			count += 1
                		endif
                		drawText( 600, 300, 100, white, count )
                		update()
                		oldc = c
                	repeat
                return void
                
                // get the set of buttons
                function getButtons()
                	buttonControl result = []
                    result[0] = getButton( "Start", { 200, 100 },  { 100, 100 }, white, black, 50 )
                    result[1] = getButton( "Stop",  { 200, 100 },  { 100, 300 }, white, black, 50 )
                    result[2] = getButton( "Reset", { 200, 100 },  { 100, 500 }, white, black, 50 )
                	result[0].focused = true
                return result
                
                // draw tge set of buttons
                function drawButtons( buttons )
                	for i = 0 to len( buttons ) loop
                		drawButton( buttons[ i ] )
                	repeat
                return void
                
                // get a string consisting of number chars
                function getString( char, number )
                	string result = ""
                	int i = 0
                	for i = 0 to number loop
                		result += char
                	repeat
                return result
                
                // find the current text size
                function getTextHeight( )
                	int result = 0
                	string text = getString( "M", 50 )
                	result = textWidth( text )
                	result = int( round( result / 25.625 ) )
                return result
                
                // find the width of text at the specified size
                function getTextWidth( text, size )
                	int result = 0
                	saveTextSize = getTextHeight( )
                	textSize( size )
                	result = textWidth( text )
                    textSize( saveTextSize )
                return result
                
                // initialize the button properties
                function getButton( label, size, pos, colour, labelColour, labelHeight )
                	buttonControl result 
                	result.label = label
                	result.size = size
                	result.pos = pos
                	result.extent = { pos.x, pos.y, pos.x + size.x, pos.y + size.y }
                	result.colour = colour
                	result.labelColour = labelColour
                	result.labelHeight = labelHeight
                	result.focused = 0
                	int labelWidth = getTextWidth( label, labelHeight )
                	result.labelOffset = { ( size.x - labelWidth ) / 2, ( size.y - labelHeight ) / 2 }
                return result
                
                // draw an individual button
                function drawButton( button )
                    vector pos = button.pos
                    vector size = button.size
                    vector offset = button.labelOffset
                    int borderSize = 3
                	if button.focused then
                		box( pos.x - borderSize, pos.y - borderSize, size.x + borderSize * 2, size.y + borderSize * 2, red, false )	
                	endif
                	box( pos.x, pos.y, size.x, size.y, button.colour, false )	
                	drawText( pos.x + offset.x, pos.y + offset.y, button.labelHeight, button.labelColour, button.label )
                return void
                
                // check if a button has been pressed
                function buttonPressed( button )
                  var result = false
                  var list = touch()
                  for i = 0 to len (list) loop
                    var pos = list[i]
                    if pos.x > button.extent[0] and pos.x < button.extent[2] and
                       pos.y > button.extent[1] and pos.y < button.extent[3] then
                		result = true
                	endif
                  repeat
                return result
                
                // change the focused button
                function changeFocused( focused, offset )
                	buttons[ focused ].focused = false
                	var count = len( buttons )
                	focused += offset
                	if focused < 0 then
                		focused = count - 1
                	endif
                	if focused == count then
                		focused = 0
                	endif
                	buttons[ focused ].focused = true
                return void
                
                // find the button that has focus
                function getFocused( buttons )
                	var result = -1
                	int i = 0
                	for i = 0 to len( buttons ) loop
                		if buttons[ i ].focused then
                			result = i
                			break
                		endif
                	repeat
                return result
                
                main()
                
                1 Reply Last reply Reply Quote 4
                • T
                  TwentyVyrus @pianofire last edited by

                  @pianofire sorry i don't quite under stand that. I've sorted it out except i cant make it selectable

                  pianofire 1 Reply Last reply Reply Quote 0
                  • pianofire
                    pianofire Fuze Team @TwentyVyrus last edited by

                    @TwentyVyrus Well this is an example of a selectable button control

                    1 Reply Last reply Reply Quote 0
                    • vinicity
                      vinicity F last edited by

                      Just a question, the getButtons() function, does it return the sprite created in the function or does it return a copy of the sprite?
                      In your example it would not really matter, of course, but what if I stored sprites in a global array as well from inside the function; would those be the same sprites as the ones returned by getButton()?

                      (I thought I had grasped this, but now I think I have managed to confuse myself again.)

                      pianofire 1 Reply Last reply Reply Quote 0
                      • pianofire
                        pianofire Fuze Team @vinicity last edited by

                        @vinicity It just returns an array of structs. You can make it global or local depending on what you assign the results to. I think that the change focus is currently expecting it to be global but this could be changed.

                        1 Reply Last reply Reply Quote 1
                        • First post
                          Last post