Navigation

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

    Typewriter Effect Text

    Coding
    6
    15
    923
    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 @Juggalo_Jesus last edited by

      @Juggalo_Jesus OK understood. There is nothing built-in but it shouldn't be too hard to write a function to do this.

      Juggalo_Jesus 1 Reply Last reply Reply Quote 1
      • Juggalo_Jesus
        Juggalo_Jesus @pianofire last edited by

        @pianofire I am going to try my hand at it soon I was just wondering if anyone had figured it out before I spend my time on trying to figure it out.

        1 Reply Last reply Reply Quote 1
        • pobtastic
          pobtastic F last edited by pobtastic

          It's really just a case of setting a "cached" variable and ticking it upwards every x frame. I've not done this specifically but I guess it's similar enough to other things I've written. Something like;

          frame_count = 0
          string = "Really looking forward to playing Steve's Missile Command game"
          tick = 0
          
          loop
            clear()
            printat(0, 0, string[:tick])
            if frame_count % 20 == 0 then
              // Or however you want to do it?
              // This would (hopefully) just cycle it round to zero again
              // but you'd obviously continue on rather than pause here.
              tick = (tick + 1) % len(str)
            endif
            update()
            frame_count += 1
          repeat
          

          Obviously that's completely untested!

          1 Reply Last reply Reply Quote 2
          • lawyerlounge
            lawyerlounge last edited by

            what is the colon before "tick" for?

            printAt(0, 0, string[:tick])
            

            Also, what and how is % used?

            Thankyou!

            pianofire 1 Reply Last reply Reply Quote 1
            • pobtastic
              pobtastic F last edited by pobtastic

              Okay, I just tested it and meh ~ use this instead;

              frame_count = 0
              string = "Really looking forward to playing Steve's Missile Command game"
              tick = 0
              proceed = false
              
              while !proceed loop
                clear()
                printat(0, 0, string[:tick])
                if frame_count % 20 == 0 then
                  tick += 1
                  if tick == len(string) then
                    proceed = true
                  endif
                endif
                update()
                frame_count += 1
              repeat
              

              It was close enough :)

              edit: See https://fuzearena.com/forum/topic/70/hints-and-tips/9

              Juggalo_Jesus 1 Reply Last reply Reply Quote 1
              • pianofire
                pianofire Fuze Team @lawyerlounge last edited by pianofire

                @lawyerlounge Have a look at this post to see how you can slice up strings using : https://fuzearena.com/forum/topic/70/hints-and-tips/9

                % is the modulus operator which basically returns the remainder when you divide by the number see https://fuzearena.com/help/view/modulus

                1 Reply Last reply Reply Quote 2
                • pobtastic
                  pobtastic F last edited by pobtastic

                  Oop! Thanks, I missed the question about the %! The good thing about doing it by frame skipping, is that you can then also add controls in there too, and just or a button press which would speed up the "typing".

                  1 Reply Last reply Reply Quote 2
                  • lawyerlounge
                    lawyerlounge last edited by

                    Ok neat I think I understand now. The modulo operation is used to only run this loop when frame_count is a number divisible by 20 with no remainder. so it will print a new letter every 20 frames? so you could even have a button press to have frame_count += 10 to speed up the text.

                    Also when you have
                    Loop
                    clear()
                    update()
                    repeat
                    how many times does that run per second, is it 60fps?

                    1 Reply Last reply Reply Quote 2
                    • Juggalo_Jesus
                      Juggalo_Jesus @pobtastic last edited by

                      @pobtastic Thank you for this!

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

                        The above (% on the number of frames) is how I've always done this kind of thing, but I think this might be the first instance where I might be tempted to try and use a timer instead?

                        1 Reply Last reply Reply Quote 1
                        • Martin
                          Martin Fuze Team last edited by Martin

                          How about this?

                          string message = "Really looking forward to playing Steve's Missile Command game"
                          tick = 0
                          speed = 0.25
                          
                          // Call function 'doTick' every 'speed' seconds, indefinitely
                          tickTimer = setTimer(speed, -1, doTick())
                          
                          loop
                              clear()
                              printat(0, 0, message[:tick])
                              update()
                          repeat
                          
                          function doTick()
                              tick += 1
                              if (tick >= len(message)) then tick = 0 endif
                          return void
                          

                          Nearly always lots of ways to approach the same thing. Usually all just as valid.

                          1 Reply Last reply Reply Quote 5
                          • SteveZX81
                            SteveZX81 F last edited by

                            Thanks for that, I just ..borrowed it..

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