Compare commits

...

3 Commits

Author SHA1 Message Date
f5e81ad720
add humans.txt 2021-11-18 01:24:53 +03:00
ed3a76144d
add Solar2D prj example 2021-11-18 01:22:51 +03:00
16a6107b17
add webpack & gameloop examples 2021-11-18 01:21:29 +03:00
12 changed files with 305 additions and 0 deletions

View File

@ -13,3 +13,7 @@ indent_size = 4
[*.js]
indent_style = space
indent_size = 2
[humans.txt]
indent_style = tab
indent_size = 2

3
HTML/README.md Normal file
View File

@ -0,0 +1,3 @@
# HTML
- [humans.txt](humans.txt)

10
HTML/humans.txt Normal file
View File

@ -0,0 +1,10 @@
/* SITE */
Last Updated: Thu JNov 18 01:24 AM MSK 2021
Components: Null
/* TEAM */
Chef: Alexander Popov
Contacts: iiiypuk [at] iiiypuk.me
Twitter: @_iiiypuk
Ko-Fi: iiiypuk
From: Russia

View File

@ -1,6 +1,12 @@
# JavaScript
## Basic
- [Webpack](webpack.md) example config
## Canvas
- [Drawing text](drawing-text.js) - примеры рисования текста на CANVAS
- [`measureText()`](measureText.js) - возвращает информацию об измеренном тексте, например ширину
- [`drawImage()`](canvas.drawImage.js) - метод Canvas 2D API рисования изображения на холсте
## GameDev
- Canvas [GameLoop](gameloop.js) example

113
JavaScript/gameloop.js Normal file
View File

@ -0,0 +1,113 @@
// Main variables
let DEBUG = true;
let canvas;
let context;
let cW;
let cH;
// FPS
let secondsPassed;
let oldTimeStamp;
let fps;
let dragging = false;
function mMove(e) {
'use strict';
if (dragging) {
point.pX = e.offsetX * cW / canvas.clientWidth | 0;
point.pY = e.offsetY * cH / canvas.clientHeight | 0;
};
}
function mDown(e) {
'use strict';
dragging = true;
}
function mUp(e) {
'use strict';
dragging = false;
}
function clearContext() {
'use strict';
context.fillStyle = '#b27e56';
context.fillRect(0, 0, cW, cH);
}
// Init
window.onload = function() {
'use strict';
canvas = document.getElementById('game');
context = canvas.getContext('2d');
cW = canvas.width;
cH = canvas.height;
canvas.style.height = window.innerHeight + "px";
if (DEBUG) {
console.log('Canvas set size to ' + window.innerHeight + 'px');
console.log(canvas.getBoundingClientRect());
};
canvas.addEventListener('mousedown', mDown, false);
canvas.addEventListener('mouseup', mUp, false);
canvas.addEventListener('mousemove', mMove, false);
canvas.addEventListener('touchstart', mDown, false);
canvas.addEventListener('touchend', mUp, false);
canvas.addEventListener('touchmove', mMove, false);
window.requestAnimationFrame(gameLoop);
};
window.addEventListener('resize', function() {
'use strict';
let canvas = document.getElementById('game');
canvas.style.height = window.innerHeight + "px";
if (DEBUG) {
console.log('Canvas resized to ' + window.innerHeight + 'px');
console.log(canvas.getBoundingClientRect());
};
}, true);
// GameLoop
function gameLoop(timeStamp) {
'use strict';
// fps counter
secondsPassed = (timeStamp - oldTimeStamp) / 1000;
oldTimeStamp = timeStamp;
fps = Math.round(1 / secondsPassed);
// end fps counter
update();
draw();
if (DEBUG) {
context.font = '15px Arial';
context.fillStyle = '#101024';
context.fillText('FPS: ' + fps, 10, 20);
};
window.requestAnimationFrame(gameLoop);
}
function update() {
'use strict';
//
}
function draw() {
'use strict';
clearContext();
}

33
JavaScript/webpack.md Normal file
View File

@ -0,0 +1,33 @@
## WebPack
`packages.json`
```json
"scripts": {
"serve": "webpack serve",
"html": "html-minifier --collapse-whitespace --remove-comments src/index.html --output dist/index.html",
"css": "csso src/styles.css --output dist/styles.css",
"build": "npm run html && npm run css && webpack --mode=production"
},
"devDependencies": {
"webpack": "^5.42.0",
"webpack-cli": "^4.7.2",
"webpack-dev-server": "^3.11.2"
}
```
`webpack.config.js`
```javascript
const path = require('path');
module.exports = {
mode: 'development',
entry: './src/index.js',
output: {
path: path.resolve(__dirname, 'dist'),
filename: 'engine.js',
},
devServer: {
contentBase: path.join(__dirname, 'src'),
compress: false,
port: 55555,
},
};
```

View File

@ -0,0 +1,10 @@
## Legend
- 🐛 - Bug
- ✔️ - Fixed
- ❌ - Removed
- - Added
- - Information
- ♻️ - Edited
## 0.1.0 - [17/04/2021] - (not work)
-

View File

@ -0,0 +1 @@
-

View File

@ -0,0 +1,37 @@
settings =
{
orientation =
{
default = "portrait",
supported = { "portrait", },
},
android =
{
usesPermissions =
{
"android.permission.INTERNET",
},
},
iphone =
{
xcassets = "Images.xcassets",
plist =
{
UIStatusBarHidden = false,
UILaunchStoryboardName = "LaunchScreen",
},
},
plugins =
{
},
excludeFiles =
{
all = { "Icon.png", "Icon-*dpi.png", "Images.xcassets", },
android = { "LaunchScreen.storyboardc", },
},
}

View File

@ -0,0 +1,18 @@
application =
{
content =
{
width = 1080,
height = 1920,
scale = "letterbox",
fps = 60,
--[[
imageSuffix =
{
["@2x"] = 2,
["@4x"] = 4,
},
--]]
},
}

View File

View File

@ -0,0 +1,70 @@
local composer = require('composer')
local scene = composer.newScene()
local groupBack
local groupMain
local groupUI
function gameLoop()
--
end
local function onFrame(event)
--
end
function scene:create(event)
local sceneGroup = self.view
groupBack = display.newGroup()
groupMain = display.newGroup()
groupUI = display.newGroup()
local debugRect = display.newRect(display.contentCenterX, display.contentCenterY, display.contentWidth, display.contentHeight )
debugRect:setFillColor(0.807, 0.925, 0.956)
end
function scene:show(event)
local sceneGroup = self.view
local phase = event.phase
if (phase == "will") then
-- Code here runs when the scene is still off screen (but is about to come on screen)
elseif (phase == "did") then
gameLoopTimer = timer.performWithDelay(500, gameLoop, 0)
end
end
function scene:hide(event)
local sceneGroup = self.view
local phase = event.phase
if (phase == "will") then
-- Code here runs when the scene is on screen (but is about to go off screen)
elseif (phase == "did") then
-- Code here runs immediately after the scene goes entirely off screen
end
end
function scene:destroy(event)
local sceneGroup = self.view
-- Code here runs prior to the removal of scene's view
end
scene:addEventListener('create', scene)
scene:addEventListener('show', scene)
scene:addEventListener('hide', scene)
scene:addEventListener('destroy', scene)
Runtime:addEventListener('enterFrame', onFrame)
return scene