Luca Galli presented an introduction to HTML5 game programming using ImpactJS. ImpactJS is a JavaScript game framework that uses the HTML5 Canvas element to create 2D games that can be played on the web or mobile. Key points discussed include:
- HTML5 allows for cross-platform game development and deployment without plugins or additional costs.
- Using a framework like ImpactJS avoids needing to write boilerplate code from scratch and provides tools to handle issues like asynchronous loading and variable performance across devices.
- ImpactJS uses a module system to organize code and classes to structure objects in a prototypal inheritance model. Core classes cover game loop, entities, backgrounds, collisions and input handling.
-
Introduction to html5 game programming with ImpactJsLuca Galli
A brief introduction to HTML5 Game Development that describes and use ImpactJs, one of the most famous and complete frameworks for HTML5 Games, mostly for learning purposes. The benefits of HTML5 Games are described, along with the importance of using a Framework and describing in details the ImpactJs Game Engine (no code provided, since it's proprietary). Two different games are coded on the fly during the lesson, while providing tips and suggestions. The Reference, Bibliography and Resources section provide useful pointers for beginners.
Introduction to html5 game programming with ImpactJsLuca Galli
A brief introduction to HTML5 Game Development that describes and use ImpactJs, one of the most famous and complete frameworks for HTML5 Games, mostly for learning purposes. The benefits of HTML5 Games are described, along with the importance of using a Framework and describing in details the ImpactJs Game Engine (no code provided, since it's proprietary). Two different games are coded on the fly during the lesson, while providing tips and suggestions. The Reference, Bibliography and Resources section provide useful pointers for beginners.
An introductory presentation about the Unity game engine given at GarageGeeks HQ in 2012, meant to bring programmers who have no game development experience up to speed with Unity
Chapter 03 of the lecture Style & Design Principles taught at SAE Institute Hamburg.
Drawbacks of inheritance-based game models and introduction to aggregation-based game models.
An introduction to what multiplayer games are, what makes them different from normal games, how to approach building them and specifically how to begin building them with the Unity game engine.
Talk given at the GameIS & Dragonplay mobile multiplayer hackathon, 30/7/2015
An introductory presentation about the Unity game engine given at GarageGeeks HQ in 2012, meant to bring programmers who have no game development experience up to speed with Unity
Chapter 03 of the lecture Style & Design Principles taught at SAE Institute Hamburg.
Drawbacks of inheritance-based game models and introduction to aggregation-based game models.
An introduction to what multiplayer games are, what makes them different from normal games, how to approach building them and specifically how to begin building them with the Unity game engine.
Talk given at the GameIS & Dragonplay mobile multiplayer hackathon, 30/7/2015
First Seminar about game design and game development: introduction to formal elements of the games, different game genres based on their mechanics and some concepts about gamification
Matching Game Mechanics and Human Computation Tasks in Games with a PurposeLuca Galli
Presentation held at ACM Workshop on Serious Games at ACM Multimedia 2014 to introduce techniques that can be used to match Human Computation Tasks to Game Mechanics.
The development process of a traditional digital game is described to put the basis on which the development of GWAP can be described. The concept of Human Computation Task is provided along with the most common multimedia refinement tasks that can be found in literature and everyday scenarios. Finally game mechanics that could be matched to particular task instances are shown, along with examples. The entire process has been applied to a real Game with a Purpose scenario.
Introduction to Games with a Purpose design and PlaytestingLuca Galli
Presentation held at 6th Qualinet General Assembly to introduce the current status of research related to Games with a Purpose, with notes regarding the QoE in Gwaps
In today’s gaming world, the word “Achievements”, even if rooted in the gaming history, has become extremely popular. The spread of broadband connections and the introduction of multiplayer interactions as core components of a videogame have brought to life to a number of social platforms like Xbox Live!, Playstation Network, Steam and Kongregate, in which the players can track their progress along different game titles and compete among each others. Unfortunately, even if such platforms share similar features, the way in which they manage the aspects of user profiling and statistic tracking is different, leaving the architectural and development aspects of an achievement system tied to the implementation of each vendor. This paper provides an insight on Achievements, their purposes and the way in which they have evolved. A taxonomy of possible achievements is shown along with a set of guidelines to be followed when developing them. Finally a model that can be used to describe all the existing systems is introduced in order to try to put the basis for an open platform capable of integrating existing gaming communities.
Palestine last event orientationfvgnh .pptxRaedMohamed3
An EFL lesson about the current events in Palestine. It is intended to be for intermediate students who wish to increase their listening skills through a short lesson in power point.
Embracing GenAI - A Strategic ImperativePeter Windle
Artificial Intelligence (AI) technologies such as Generative AI, Image Generators and Large Language Models have had a dramatic impact on teaching, learning and assessment over the past 18 months. The most immediate threat AI posed was to Academic Integrity with Higher Education Institutes (HEIs) focusing their efforts on combating the use of GenAI in assessment. Guidelines were developed for staff and students, policies put in place too. Innovative educators have forged paths in the use of Generative AI for teaching, learning and assessments leading to pockets of transformation springing up across HEIs, often with little or no top-down guidance, support or direction.
This Gasta posits a strategic approach to integrating AI into HEIs to prepare staff, students and the curriculum for an evolving world and workplace. We will highlight the advantages of working with these technologies beyond the realm of teaching, learning and assessment by considering prompt engineering skills, industry impact, curriculum changes, and the need for staff upskilling. In contrast, not engaging strategically with Generative AI poses risks, including falling behind peers, missed opportunities and failing to ensure our graduates remain employable. The rapid evolution of AI technologies necessitates a proactive and strategic approach if we are to remain relevant.
Honest Reviews of Tim Han LMA Course Program.pptxtimhan337
Personal development courses are widely available today, with each one promising life-changing outcomes. Tim Han’s Life Mastery Achievers (LMA) Course has drawn a lot of interest. In addition to offering my frank assessment of Success Insider’s LMA Course, this piece examines the course’s effects via a variety of Tim Han LMA course reviews and Success Insider comments.
Synthetic Fiber Construction in lab .pptxPavel ( NSTU)
Synthetic fiber production is a fascinating and complex field that blends chemistry, engineering, and environmental science. By understanding these aspects, students can gain a comprehensive view of synthetic fiber production, its impact on society and the environment, and the potential for future innovations. Synthetic fibers play a crucial role in modern society, impacting various aspects of daily life, industry, and the environment. ynthetic fibers are integral to modern life, offering a range of benefits from cost-effectiveness and versatility to innovative applications and performance characteristics. While they pose environmental challenges, ongoing research and development aim to create more sustainable and eco-friendly alternatives. Understanding the importance of synthetic fibers helps in appreciating their role in the economy, industry, and daily life, while also emphasizing the need for sustainable practices and innovation.
June 3, 2024 Anti-Semitism Letter Sent to MIT President Kornbluth and MIT Cor...Levi Shapiro
Letter from the Congress of the United States regarding Anti-Semitism sent June 3rd to MIT President Sally Kornbluth, MIT Corp Chair, Mark Gorenberg
Dear Dr. Kornbluth and Mr. Gorenberg,
The US House of Representatives is deeply concerned by ongoing and pervasive acts of antisemitic
harassment and intimidation at the Massachusetts Institute of Technology (MIT). Failing to act decisively to ensure a safe learning environment for all students would be a grave dereliction of your responsibilities as President of MIT and Chair of the MIT Corporation.
This Congress will not stand idly by and allow an environment hostile to Jewish students to persist. The House believes that your institution is in violation of Title VI of the Civil Rights Act, and the inability or
unwillingness to rectify this violation through action requires accountability.
Postsecondary education is a unique opportunity for students to learn and have their ideas and beliefs challenged. However, universities receiving hundreds of millions of federal funds annually have denied
students that opportunity and have been hijacked to become venues for the promotion of terrorism, antisemitic harassment and intimidation, unlawful encampments, and in some cases, assaults and riots.
The House of Representatives will not countenance the use of federal funds to indoctrinate students into hateful, antisemitic, anti-American supporters of terrorism. Investigations into campus antisemitism by the Committee on Education and the Workforce and the Committee on Ways and Means have been expanded into a Congress-wide probe across all relevant jurisdictions to address this national crisis. The undersigned Committees will conduct oversight into the use of federal funds at MIT and its learning environment under authorities granted to each Committee.
• The Committee on Education and the Workforce has been investigating your institution since December 7, 2023. The Committee has broad jurisdiction over postsecondary education, including its compliance with Title VI of the Civil Rights Act, campus safety concerns over disruptions to the learning environment, and the awarding of federal student aid under the Higher Education Act.
• The Committee on Oversight and Accountability is investigating the sources of funding and other support flowing to groups espousing pro-Hamas propaganda and engaged in antisemitic harassment and intimidation of students. The Committee on Oversight and Accountability is the principal oversight committee of the US House of Representatives and has broad authority to investigate “any matter” at “any time” under House Rule X.
• The Committee on Ways and Means has been investigating several universities since November 15, 2023, when the Committee held a hearing entitled From Ivory Towers to Dark Corners: Investigating the Nexus Between Antisemitism, Tax-Exempt Universities, and Terror Financing. The Committee followed the hearing with letters to those institutions on January 10, 202
Model Attribute Check Company Auto PropertyCeline George
In Odoo, the multi-company feature allows you to manage multiple companies within a single Odoo database instance. Each company can have its own configurations while still sharing common resources such as products, customers, and suppliers.
The French Revolution, which began in 1789, was a period of radical social and political upheaval in France. It marked the decline of absolute monarchies, the rise of secular and democratic republics, and the eventual rise of Napoleon Bonaparte. This revolutionary period is crucial in understanding the transition from feudalism to modernity in Europe.
For more information, visit-www.vavaclasses.com
Introduction to AI for Nonprofits with Tapp NetworkTechSoup
Dive into the world of AI! Experts Jon Hill and Tareq Monaur will guide you through AI's role in enhancing nonprofit websites and basic marketing strategies, making it easy to understand and apply.
Welcome to TechSoup New Member Orientation and Q&A (May 2024).pdfTechSoup
In this webinar you will learn how your organization can access TechSoup's wide variety of product discount and donation programs. From hardware to software, we'll give you a tour of the tools available to help your nonprofit with productivity, collaboration, financial management, donor tracking, security, and more.
How to Make a Field invisible in Odoo 17Celine George
It is possible to hide or invisible some fields in odoo. Commonly using “invisible” attribute in the field definition to invisible the fields. This slide will show how to make a field invisible in odoo 17.
3. WHY CHOOSING HTML5 FOR WEB GAMES?
No need to install external plugins (e.g. Unity)
Crossplatform Development & Deployment with no additional costs
(Licencing for Unity, UDK and similars is a nightmare)
Optional Installation: the distribution of HTML5 games depends solely
upon the developer; live updates are possible if online distributed, cross
deployment as hybrid applications
...but still a futuristic technology, even if we are getting there
4. WHAT IF I WANT TO START FROM SCRATCH?
Starting from scratch is certainly possible but not a good idea if you want
to start developing a game quickly:
Games require a lot of images, sound effects, libraries and other
resources that are loaded asynchronously; the Javascript code will start
executing before all the resources have been loaded. This results in
popping images and sound effect not played when they should.
Solution: create a preloader that defers script execution until all the
resources have been downloaded
Different machines and browsers will run the game at different speeds.
Animations and movement speeds should be independent of the frame
rate the game is running at
You have to handle different resolutions targeting different devices (e.g.
Desktop, Mobile...)
Lesson: There is a lot of boilerplate code that every game needs to work
properly. No need to reinvent the wheel: Use a Framework!
Further details on:
http://msdn.microsoft.com/en-us/hh563503
5. WHAT IS IMPACTJS?
JavaScript game framework.
Impact takes advantage of the modern browser’s Canvas element in order
to create high-performance 2D games on the Web and even mobile.
Easy to pick up good code examples, active community, robust level
editor
Why choosing it if it’s commercial?
• Once you buy the license, the engine source code it’s yours to be modified
at will.
• You can dive into the code and actually read it, without jumping back and
forth between dozens of layers of abstractions. Other game engines are
more convoluted and don't make it as clear what a particular piece of code
is doing.
• Accessible and consistent API that does not make use of cumbersome and
obscure abstractions.
• Performance monitoring tools integrated within the engine
• For these reasons, Impact is a good fit if you want to LEARN about game
engines or even Javascript programming in general.
6. LET’S START...
Must have:
• PHP
• The level editor has a php dependence for saving levels and baking the
game, and it’s a core tool.
• Apache
• Necessary for hosting the game locally and testing it out while developing
• IDEs
• Impact has no IDE dependencies; you can create your games with any
simple text editor.
• Hint: As Politecnico’s Students you have free access to the Jetbrains suite,
use it!
• Browsers
• Any modern browser with canvas and audio tag support will do but Webkit
based ones such as Chrome will offer better performances.
7. LET’S START...
Handy Tools:
• IntelXdk: Development Framework for HTML5 Applications with devices emulation
• Shoebox: to handle spritesheets generation
• Spartan: Pixel Art animation software and procedurally generated textures
• Spriter: an editor for cutout animations
• Cxfr: Tool for dummies to create sound effects
8. APACHE/PHP/MYSQL
There are a number of possible choices to have such a stack, I
prefer a quick and easy environment just to start as soon as
possible:
9. DOWNLOAD AND DEPLOY THE ENGINE
Extract the zip file containing the engine and the editor, take the
«Impact» folder, rename it as you wish (the name of your game
could be a good idea) and place it in the root location of your
server, for XAMPP:
"your installation location"xampphtdocs
10. DIRECTORY STRUCTURE
media/ Contains Images, Sounds, Music files
lib/ Hosts the Javascript Files
lib/game/ Hosts the code of the game
lib/game/entities/ Hosts the code for the entities
lib/game/levels/ Hosts the levels of the game
lib/impact/ Hosts the Game Engine Libraries
lib/weltmeister/ Hosts the Level Editor Libraries
14. IMPACT MODULES
1 ig.module(
2 'game.main'
3 )
4 .requires(
5 'impact.game',
6 'impact.image',
7 'game.other-file'
8 )
9 .defines(function(){
10 // code for this module
11 });
Natively, javascript has not a way to load other javascript files within an object,
for this reason impact has implemented its own include system, similar in a way
to other Javascript libraries that load modules and dependeces (e.g.
Require.js). Modules and their dependencies typically reside in the lib/ folder of
your Impact project directory, and subdirectories are included in a path to these
files using object-model dot syntax.
Defines the module name that corresponds
to the file name. Therefore, the main.js file
sits in the lib/game/main.js
Any additional files that have to be loaded
at runtime, before the module’s body and
define function. Are essentially the libraries
that we need to use when creating a game
The last step the module takes is to
execute the function passed to the
.defines() method.
15. CLASSES IN IMPACT
Javascript does not have a real notion of a traditional class structure like
the one you could have in other OOP languages, since it is a prototypal
language; everything is an Object.
This is the blessing and curse of Javascript, making it incredibly flexible
but also extremely difficult to structure the code in a reusable way.
Impact classes are derived from John Resig’s Javascript Inheritance
code, extended with deep copying of properties and static instantations
For further information regarding OOP in Javascript, refer to:
• https://developer.mozilla.org/en-US/docs/Web/JavaScript/A_re-
introduction_to_JavaScript
• https://developer.mozilla.org/en-US/docs/Web/JavaScript/Introduction_to_Object-
Oriented_JavaScript
• http://www.crockford.com/javascript/private.html
• http://phrogz.net/js/classes/OOPinJS.html
16. CLASSES IN IMPACT
// Create a new class "Person"
var Person = ig.Class.extend({
name: '',
init: function( name ) {
this.name = name;
}
});
// Instantiate an object of the
first class
var e = new Person('John Doe');
e.name; // => John Doe
// Extend the "Person" class
var Zombie = Person.extend({
init: function( name ) {
this.parent( 'Zombie: ' + name );
}
});
// Instantiate a Zombie
var p = new Zombie('John Doe');
p.name; // => Zombie: John Doe
18. THE GAME LOOP
A game loop runs continuously during gameplay. Each turn of the loop,
it processes user input without blocking, updates the game state,
and renders the game. It tracks the passage of time to control the rate of
gameplay.
Actually more considerations could be done (like fixed or variable time
steps) , but we will not dig through all the details…
http://gameprogrammingpatterns.com/game-loop.html
19. IMPACT.JS -> IG NAMESPACE
the ig object provides the Module
definition and loading capabilities as
well as some utility functions.
ig is not an instance of a ig.Class, but
just a simple JavaScript object and thus
can't be subclassed.
Impact extends some of JavaScripts
native objects, such as Number, Array
and Function.
20. ANIMATION
An ig.Animation object takes care of
animating an Entity or Background Map tile.
Frames from an animation sheet – an image
with all animation frames – are drawn as
specified by the animations frameTime and
sequence.
21. BACKGROUND MAP
An ig.BackgroundMap draws tiles from a Tileset, as indicated by its 2D
data Array.
The size of the tileset image must a multiple of the tilesize, otherwise
Impact will get confused with the tile numbering. E.g. with a tilesize of 32
the width and height of your tileset image should be one of: 32, 64, 96,
128…
• You can either create a
BackgroundMap by hand, or use the
ig.Game class' .loadLevel() method,
which takes the save data from the
level editor and creates
BackgroundMaps according to it.
22. COLLISION MAP
An ig.Collision takes a 2D tilemap and
allows tracing against it for collisions.
The ig.Game class' .loadLevel() method
takes the save data from Weltmeister
and creates a CollisonMap if present.
By default, all entities trace against the
ig.game.collisionMap as part of their
update cycle.
23. ENTITY
Interactive objects in the game world are typically
subclassed from this base entity class. It provides
animation, drawing and basic physics. Subclassing
your entities from ig.Entity ensures that it can be
added to the game world, react to the collision map
and other entities and that it can be used in the
editor.
24. GAME
ig.Game is the main hub for your game. It hosts all currently active
entities, background maps and a collision map. You can subclass your
own Game Class from ig.Game.
Its .update() and .draw() methods take care of collision detection,
checking entities against each other and drawing everything to the
screen.
25. INPUT
ig.Input handles all Keyboard and Mouse input.
You can bind keys to specific actions and then ask if one of these actions
is currently held down (.state()) or was just pressed down after the last
frame (.pressed()).
Note that an instance of ig.Input is automatically created at ig.input
(lowercase) by the ig.main() function.
// On game start
ig.input.bind( ig.KEY.UP_ARROW, 'jump' );
// In your game's or entity's update() method
if( ig.input.pressed('jump') ) {
this.vel.y = -100;
}
26. SYSTEM
ig.System takes care of starting and stopping
the run loop and calls the .run() method on
the current Game object. It also does the
housekeeping for ig.Input and provides some
utility methods.
An instance of ig.System is automatically
created at ig.system (lowercase) by the
ig.main() function.
27. AND MORE...
Several other classes are present in the
Engine:
Loader: takes care of preloading the
resources and showing a loading bar
Music, Sound, Soundmanager to handle
sounds within the game
Timer to handle timers and time intervals
Font to draw text based on bitmap fonts into
the canvas
28. • The Sequence
Diagram describes
the necessary
interactions between
the basic classes to
start a game loop
• Classes for handling
sounds have been
omitted for simplicity
IMPACTJS GAME ENGINE FLOW: SEQUENCE DIAGRAM
29. IMPACT GAME ENGINE FLOW SUMMARIZED – PT.1
As soon as you start your game, Impact will set up an interval that calls
the ig.system.run() method 60 times per second. This method does some
housekeeping stuff and then calls your game's .run() method - which, by
default, just calls .update() and .draw() on itself.
The ig.Game's .draw() method is pretty boring: it just clears the screen
and calls .draw() on each background layer and entity.
The .update() method updates the background layer positions and - this is
where it gets interesting - calls .update() on each entity. The default
.update() method of an entity moves it according to it's physics properties
(position, velocity, bounciness...) and takes the game's collision map into
account.
30. IMPACT GAME ENGINE FLOW SUMMARIZED – PT.2
After all entities have been updated, the game's .checkEntities() method is
called. This resolves all dynamic collisions - that is, Entity vs. Entity
collisions. It also calls an entities .check() method, if it overlaps with
another entity and "wants" checks (see the Class Reference for more
details).
You can overwrite any of these methods in your own ig.Entity and
ig.Game sub-classes - you can provide your own logic and then, if you
want, call the original methods with this.parent().
Remember, this all is happening for each and every frame. That is (if the
browser can keep up) 60 times per second.