Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Nostalgia Meets Technology: Super Mario with Ty...

Nostalgia Meets Technology: Super Mario with TypeScript

Avatar for Manfred Steyer

Manfred Steyer PRO

March 03, 2026
Tweet

More Decks by Manfred Steyer

Other Decks in Programming

Transcript

  1. •Textmasterformat bearbeiten • Zweite Ebene Mastertextformat bearbeiten 3 1) Just

    for Fun! 2) Learning/ Repeating Typical Patterns 3) Nice Programming Exercise Why?
  2. •Textmasterformat bearbeiten • Zweite Ebene Mastertextformat bearbeiten 4 1) Game

    Loop 2) Tiles & Coordinates 3) Gravity 4) Side Scrolling & View Port 5) Collision Detection Agenda
  3. •Textmasterformat bearbeiten • Zweite Ebene Mastertextformat bearbeiten 5 About Me

    (Remote) Angular Workshops and Consulting Google Developer Expert for Angular Blog, Books, Articles, and Talks about Angular Manfred Steyer, ANGULARarchitects.io
  4. •Textmasterformat bearbeiten • Zweite Ebene Mastertextformat bearbeiten 7 Loading Images

    const response = await fetch('/hero.png'); const blob = await response.blob(); const heroTile = await createImageBitmap( blob, 0, // x 8, // y 16, // width 16 // height );
  5. •Textmasterformat bearbeiten • Zweite Ebene Mastertextformat bearbeiten 9 A Simple

    Game Loop function tick(ctx: HeroContext, timeStamp: number): void { […] }
  6. •Textmasterformat bearbeiten • Zweite Ebene Mastertextformat bearbeiten 10 A Simple

    Game Loop function tick(ctx: HeroContext, timeStamp: number): void { console.log('timeStamp', timeStamp); […] }
  7. •Textmasterformat bearbeiten • Zweite Ebene Mastertextformat bearbeiten 11 A Simple

    Game Loop function tick(ctx: HeroContext, timeStamp: number): void { console.log('timeStamp', timeStamp); if (keyboard.right) { ctx.x += 1; } […] }
  8. •Textmasterformat bearbeiten • Zweite Ebene Mastertextformat bearbeiten 12 A Simple

    Game Loop function tick(ctx: HeroContext, timeStamp: number): void { console.log('timeStamp', timeStamp); if (keyboard.right) { ctx.x += 1; } ctx.context.clearRect(0, 0, 1000, 1000); ctx.context.drawImage(ctx.heroTile, ctx.x, ctx.y, 16, 16); […] }
  9. •Textmasterformat bearbeiten • Zweite Ebene Mastertextformat bearbeiten 13 A Simple

    Game Loop function tick(ctx: HeroContext, timeStamp: number): void { console.log('timeStamp', timeStamp); if (keyboard.right) { ctx.x += 1; } ctx.context.clearRect(0, 0, 1000, 1000); ctx.context.drawImage(ctx.heroTile, ctx.x, ctx.y, 16, 16); requestAnimationFrame((timeStamp) => tick(ctx, timeStamp)); }
  10. •Textmasterformat bearbeiten • Zweite Ebene Mastertextformat bearbeiten 23 View Port

    Scroll Offset Scroll Offset + View Port Width x renderX x - renderX
  11. •Textmasterformat bearbeiten • Zweite Ebene Mastertextformat bearbeiten 29 Bounding Boxes

    a.left < b.right b.left < a.right a.top < b.bottom b.top < a.bottom a b
  12. •Textmasterformat bearbeiten • Zweite Ebene Mastertextformat bearbeiten 31 Architecture, Concepts,

    Implementation Modern Angular 400+ pages, PDF, EPUB Regular Free Updates! Q1/2026 Waiting List: angular-book.com
  13. •Textmasterformat bearbeiten • Zweite Ebene Mastertextformat bearbeiten 32 1) Game

    Loop: Take Care of Time Delta 2) Tiles & Coordinates 3) Gravity: Increase/ Decrease Velocity 4) Side Scrolling & View Port: Change Offset i/o Hero Coordinates 5) Collision Detection: Bounding Boxes 6) We had fun! Conclusion
  14. •Textmasterformat bearbeiten • Zweite Ebene Mastertextformat bearbeiten 33 [Social Media]

    Manfred Steyer [web] ANGULARarchitects.io Manfred Steyer @ Manfred Steyer Slides, Examples, Book Remote Company Workshops and Consulting http://angulararchitects.io