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.
    • Juggalo_Jesus
      Juggalo_Jesus last edited by

      Has anyone figured out or does anyone know how to create/ do a typewriter effect on text being displayed?

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

        @Juggalo_Jesus Do you mean like a typewriter font?

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

          @pianofire no, like an animated effect displaying it letter by letter instead of just printing the entire line out all at once. You see this effect used in a lot of games and I am using the Legend of Zelda: Ocarina of Time to show you what I mean.

          pianofire 1 Reply Last reply Reply Quote 0
          • 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