Giter Site home page Giter Site logo

kwk-l2-a-frame-system-interaction-sgharms-test-webdev-fund's Introduction

Objectives

  1. Explore one way to manage components with a system
  2. Create an interactive project using A-Frame collisions

Overview

Let's build a simple game! We will use JavaScript to control the system that drives our gameplay. First, we will take a step back and re-organize code we used in the previous lab to better make use of the A-Frame library. Before we begin, let's take to talk about the challenges we face as programmers.

Programming Obstacles

Early on in learning programming, you will likely find that most of your time is taken up understanding the general, and language specific, ways programming works. Syntax, environment management, and execution flow will be (rightfully so) major time sinks to become comfortable with. As is true when learning math, competency in some areas opens up the door to address more abstracted problems that can be solved with computation. Consequentially, the obstacles you face when writing programs change as well. As you continue to improve as a programmer, and especially as your programs grow, more of your time will be taken up with considerations around how you structure your applications. If we aren't careful, we can end up in a position where, in order to add a new feature to a program, we need to rewrite some of the foundations of our code. Our code becomes constricted, just like Bernice here:

In the previous lab, we mostly 'hacked' our way through a program structure to render the spheres on the screen. In this exercise, we will refactor our existing code to be (mostly) in-line with the A-Frame framework's suggested way of structuring code. We are doing this because it reduces the burden on us to make decisions on how to structure the more difficult parts of our program.

At this point, we can trust that the A-Frame team's structural solutions are better than what we would come up with on the fly. Not only are they intimate with the source code itself, they also have experience with A-Frame applications that need to grow and therefore need to implement certain structures early on to ensure 'growth' doesn't mean 'rewrite'.

That being said, this project bridges "A-Frame best practices" with "easy to interact with code". Let's get started!

What We Have So Far

We already have a good amount of code and a fully working project ready for you. If you run your server and take a look at what we have in the browser, you should find the beginnings of a very mediocre game. We have a fixed camera behind a ball (representing the player) inside of the THUNDERDOME Mad Max โ„ข.

Additionally, we have a lone ball bouncing around on the inside. If the ball touches our player, an sound is fired and the Game system's restart() method is called. We have defined wrapper classes for Thunderdome, Ball, and Player just to make our lives easier and to keep everything organized and modular.

If you take a look at our entities, you will notice that none of them have functions to animate or update. Instead, they only keep track of their components. This is because we are following the Entity-Component-System paradigm, in which the game System, and not the entities themselves, calculates and applies updates.

The System

In this application, the main system we want to be focusing on is defined in the Game class. A common pattern in game systems design is to use a tick() or update() function that performs some operation(s) on every unit of game time. We are using just that! Game's tick() function does the following every time the program runs an update:

  • For every ball:
    • check whether the ball is colliding with the player
      • if yes, invoke restart()
    • check whether the ball is colliding with the outer sphere
      • if yes, update direction of ball
    • move the ball

If you would like some 'low hanging fruit' on how you can start interacting with the code, open up index.js and add a bunch of GAME.spawnBall() calls!

Deliverables

Improve Gameplay. As the game currently stands, one ball is bouncing around. If the player collides with a ball then all balls are de-spawned. While we have a strong foundation, we haven't done much with the functionality that is available with the existing code. Start with this:

  • When a player collides with a ball (a.k.a. when the restart function is called), a new ball should be created so that the fun can continue
  • Over time (i.e. every 5 seconds) a new ball should spawn. Do not use setInterval()!

Once you have completed the above, try to implement new features of your own design to the game we have. This could be anything from adding sounds to ball-wall collisions, improving the game controls, changing the goal to collecting balls instead of avoiding them, or whatever you like! The documentation for a-frame is very beginner friendly, and if you are looking for inspiration their examples page has some great ideas to get the creativity flowing.

kwk-l2-a-frame-system-interaction-sgharms-test-webdev-fund's People

Contributors

danielseehausen avatar sammarcus avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.