# kiwi.js **Repository Path**: mirrors/kiwi.js ## Basic Information - **Project Name**: kiwi.js - **Description**: Kiwi.js是由来自新西兰的GameLab公司开发的一款全新的开源HTML5 JavaScript游戏引擎,主张Mobile First,在经过一年多的开发和测试之后,最新是Ki - **Primary Language**: JavaScript - **License**: MIT - **Default Branch**: master - **Homepage**: https://www.oschina.net/p/kiwijs - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2020-08-14 - **Last Updated**: 2025-12-13 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README Kiwi.js 1.4.0 ============= ![Splash](http://kiwi-js.s3.amazonaws.com/wounds-with-friends.jpg) Kiwi.js is the world's easiest to use Open Source HTML5 game framework for making both mobile and desktop HTML5 browser games. Our focus is blazingly fast WebGL rendering and complementary tools to make professional quality serious games. We use [CocoonJS](https://www.ludei.com/) for publishing games and App creation. Version: 1.4.0 "Cole" - Visit the [Official Website](http://www.kiwijs.org/documentation/getting-started/) - Follow us on [Twitter](http://www.twitter.com/kiwijsengine) - Explore [examples for Kiwi.js](http://examples.kiwijs.org/) - Read our [API Documentation](http://api.kiwijs.org/) - Browse our Plugin Repository - [Contact](http://www.kiwijs.org/help/) us for more information ##Welcome to Kiwi! Born out of a desire to democratize HTML5 game development and to make something that we love available to the masses, we bring you Kiwi.js. We don't mean to brag (too much), but Kiwi.js is fast. With hardware accelerated WebGL rendering, you can expect your games to be easily deployed across mobile and desktop browsers. But wait, they can also be deployed to mobile devices as native apps, using the [CocoonJS](https://www.ludei.com/) framework. Our mission is to follow the best open source community practices. We're backing that up by providing professional support when its needed, so everyone — commercial developers as well as indies — feel the love. And we do think you're going to feel the love. What couldn't you love about a game engine that is named after a fluffy adorable bird *and* one of the world's greatest game inventors? ##How to Guides Have you ever been trying to figure out how to do something on a website and the help pages resemble a [Goosebumps](https://en.wikipedia.org/wiki/Goosebumps) choose your own adventure book? So have we, which is why we have spent literally hundreds of hours writing good help documents for Kiwi.js developers. Our [Official Documentation Codex](http://www.kiwijs.org/documentation/getting-started/) is here if you do get stuck. ## Release Notes for this Version Number tags refer to [GitHub issues](https://github.com/gamelab/kiwi.js/issues). ### v1.4.0 "Cole" #### New Features * Much faster rendering! Render pipeline caches the results of matrix concatenation, overcoming a significant bottleneck. Also uses cached data objects during rendering, rather than recreating assets on the fly. Depending on scene composition, this may yield a 10-50% performance improvement. Hint: Objects that don't transform are more performant. * `Geom.Transform.ignoreChild` property added. Defaults `false`. If set to `true` on a `Group` or `State`, its children will not inherit transforms. They will be positioned from (0, 0). This can save a matrix concatenation operation for every object in a group that doesn't move, resulting in significant performance gains. It's also faster to implement than `Geom.Transform.ignoreParent` from v1.3.0 if you have several children. * Added `Geom.Intersect.rayToCircle()` intersection check. This completes the geometry intersections. (#170) * `Geom.Ray` now inherits from `Geom.Line`. This gives it a more robust feature set. (#170) * `Kiwi.Geom.Matrix.equals()` method added. * Add `state` property to `Component`. * `Kiwi.Plugins` is now a TypeScript module, allowing TypeScript developers to make plugins natively. (#208) * `File` param `timeout` added; file timeouts now default to null. This allows the user to set loading tolerances. By default, files will attempt to load forever. This can prevent crashes on slow connections. * `State.destroy` now explicitly destroys members; destruction of tracking list is more robust. This overcomes some issues which might occur when switching states. * File load checks status code and response for greater robustness. * Optimised `GameObjects.Tilemap.getOverlappingTiles()`. * Nicer layout in preloader template. * Check out [http://examples.kiwijs.org/](http://examples.kiwijs.org/) for examples covering every facet of KiwiJS development. #### Deprecations * `glMatrix` library removed. This was used for a single call during WebGL rendering. Our own matrix code seems to perform just as well. In addition, glMatrix will load itself into a different namespace if certain other frameworks are in use, which results in a crash. Rather than fork or work around glMatrix, we decided to remove it entirely, reducing the size of KiwiJS. If you need glMatrix functionality, you may obtain the stand-alone library from [http://glmatrix.net/](http://glmatrix.net/). Thanks to the team at [Cerebral Fix](http://cerebralfix.com/) for bringing this to our attention! (#136) #### Bug Fixes * `Stage.rgbColor` now correctly interprets all values in range 0-255. (#198) * Audio now loops and stops correctly. Previously, it might loop indefinitely without making sound after the first loop, which is neither a proper loop nor a proper stop. (#199, #207) * Console error will be reported when a texture atlas JSON could not be loaded (#200) * `Camera.transformPoint`, `Camera.transformPointToScreen`, `Box._rotateRect`, and `Box._rotateHitbox` now copy concatenated matrices, rather than operating directly on the matrix. (#201) * `Sound.AudioManager._unlockedSource` now passes a required parameter under iOS Safari. (#203) * Eliminated flickering at high frame rates on some devices in CocoonJS. (#204) * Prevent renderer crash when creating a shader after at least one frame has been rendered. (#210) * Touch events fixed in Internet Explorer 11. Thanks to @benliddicott for the fix! (#212, #213) * `Geom.Transform.anchorPointY` now updates correctly. (#216) * Stage visibility changes are more robust. * `Kiwi.Files.File` now supports proper parsing of Data files. * Data files now succeed properly when dealing with null variables. * Remove `version` property from `bower.json` (contributed by Kevin Kirsche). * Correct documentation of `Kiwi.Input.Keyboard` `_keyPressed` and `_keyReleased` methods * FileStore.removeFile now destroys properly * [@radarhere](https://github.com/radarhere) fixed typos in the documentation. * You can now stop the RAF from executing. (#211) More details can be found on the [Kiwi.JS repo](https://github.com/gamelab/kiwi.js) under the [1.4.0 milestone](https://github.com/gamelab/kiwi.js/issues?q=milestone%3Av1.3.0+is%3Aclosed) ## Previous Changes View the [changelog](https://github.com/gamelab/kiwi.js/blob/master/CHANGELOG.md) for a list of changes from previous versions. ##Features ####Powerful Rendering Kiwi uses a custom built WebGL rendering system for targeting modern mobile and desktop browsers as well as mobile apps through [CocoonJS](https://www.ludei.com/). Not only is Kiwi lightning quick but it is also extendible, meaning that fellow contributors can easily write their own powerful rendering Plugins and Add-ons using WebGL Shaders. For instance our WebGL Particle Plugin creates stunning special FX using this system. Of course, you can render to canvas too, which means older browsers, and mobile browsers, don't miss out. ####Mobile Publishing Kiwi.js is closely aligned with Ludei's [CocoonJS](https://www.ludei.com/). You can use Cocoon to wrap up your game and play it on iOS or Android devices. ####State Management A state management system lets you easily move between and manage game states. Each state has an optional preloader phase, a create phase, an update loop, and a destroy phase. Each of the phases are highly configurable. ####Flexible Asset Loading and Management It's easy to load in images, sound and data. You can decide when you want it to load (e.g. in a single payload at the beginning, or on a per state basis). When your assets are loaded they're super easy to access from data libraries. ####Gameobjects - Sprites, Images, Textfields Gameobjects are objects that get rendered in your game. Whether they're frame-based sprites, webGL particles, static images or text fields, they all can be moved in the game world and placed in the scene graph. ####Entity/Component system Each gameobject is an "Entity" and can have "components" attached to it. Components are small pieces of code that do something useful. For instance the arcade physics system is implemented as a component. If you want your game object to use physics, simply attach a physics component to it. Some of the standard gameobjects have components such as animation already attached. You can also write your own components. ####Scene Graph (Grouping objects) The scene graph represents all of the gameobjects that visible in your gameworld. You can group objects, and place groups within groups. You can animate and move your objects and groups and they'll behave in a consistent manner depending on how they are nested. ####Animation Sprites have an animation component that enables frame by animation from spritesheets and texture atlases. You can easily define frame sequences and frame lengths, play, pause, loop and reverse animations. There is also a built in tweening system. ####Input (Including Touch) Kiwi.js supports input for mouse, keyboard and of course touch. Mouse and touch events are easily handled by Kiwi.js pointer objects, so in most cases you don't have to worry about where the input is coming from. ####Camera Your game world is viewed through a controllable camera, which you can move and spin. ####Tilemaps Kiwi.js has support for tilemaps, including multiple tile layers. The Tiled map data format is supported, including isometric tiles. You can programatically generate tile maps, and once a tile map is created you can easily manipulate the data to change the tilemap dynamically. ####Audio Kiwi.js supports the WebAudio api, and falls back to using `