THEBADDEST
JF-Expert Member
- Dec 22, 2019
- 247
- 140
Siumii chochote tena not on this discussion, style yangu ya kuandika tu izoee.
Facebook na Google wanatumia frameworks zao ila sio 100% ni more like 50% nyingi wameziopen source zinapokea contribution toka kwa developers dunia nzima. Narudia tena nimefanya kazi na big companies, sijawahi deal na Facebook ila nimedeal na Google, lakini wote wanafanya the same thing, ukiingia Facebook language wanazotumia ni zilezile made by other people, C, C++, Php(dying), JavaScript, wamejaribu kufanya improvements to these languages ndiyo ila ni open contribution toka kwa devs dunia nzima, that's how software is made. Same for Google, siku hizi wanajitahidi kutumia Golang lakini ujue yenyewe pia ni openn source project japo ni made by Google employees, inapokea contributions worldwide.
The reason ni simple, when it comes to software development most of the times nothing beats open source na hakuna anayependa kure-invent the wheels, kitu kama kishatengenezwa na kinafanya kazi vizuri hakuna haja ya kukifix, facebook walijaribu kufix php sababu it was shit, super slow na buggy, google walijaribu kutengeneza Javascript engine sababu javascript on the browser has always been slow haikuweza ku-keep up na exponential development kwenye hardware side. Sasa wewe unajifanya unakuja na tools zako mwenyewe kusolve tatizo lipi hasa? em nitajie jina la algorithm hata moja uliyotumia kwenye rendering system yako tujue. Tatizo unatudanganya
Sio open source kwa sasa mkuu, hope unaelewa. But vizuri kuangalia source code before huja judge cuz unakuwa unajiaibisha. Usizani kwamba wanachofanya wazungu na sisi watanzania wa chini hatuwezi
draw.layout["main"] = function() {
var layout = new Object();
layout.start = function() {
draw.input.index = draw.data[draw.input.index] ? draw.input.index : 0;
draw.action.next = false;
draw.action.stop = false;
draw.action.timeout = false;
draw.item.background = new Object();
draw.item.background.render = function() {
draw.fill(Color.GREY).rectangle(0, 0, draw.width, draw.height);
};
draw.item.stop = new Object();
draw.item.stop.fade = 0.1;
draw.item.stop.render = function() {
draw.save().opacity(this.fade < 1 ? this.fade : 1).fill(Color.BRICK).rectangle(0, 0, draw.width, draw.height).restore();
};
draw.item.next = new Object();
draw.item.next.fade = 0.1;
draw.item.next.render = function() {
draw.save().opacity(this.fade < 1 ? this.fade : 1).fill(Color.WATER).rectangle(0, 0, draw.width, draw.height).restore();
};
draw.item.player = new Object();
draw.item.player.x = 20 * 8;
draw.item.player.y = 20 * 6;
draw.item.player.width = 20;
draw.item.player.height = 20;
draw.item.player.grounded = false;
draw.item.player.velocity = { x: 0, y: 0 };
draw.item.player.color = Color.DARK;
draw.item.player.friction = 0.8;
draw.item.player.gravity = 0.98;
draw.item.player.move = function() {
this.x += this.velocity.x;
this.y += this.velocity.y;
this.velocity.x *= this.friction;
this.velocity.y += this.gravity;
};
draw.item.player.render = function() {
draw.fill(this.color);
draw.rectangle(this.x, this.y, this.width, this.height);
};
draw.item.fire = new Array();
draw.item.enemy = new Array();
draw.item.environment = draw.pixelset();
draw.item.environment.x = 0;
draw.item.environment.y = 0;
draw.item.environment.size = { width: 20, height: 20 };
draw.item.environment.data(draw.data[draw.input.index]);
draw.item.environment.update();
draw.item.environment.each.forEach(function(environment) {
if (environment.id == 6) draw.item.enemy.push({
x: environment.x,
y: environment.y + environment.height - 30,
width: 30,
height: 30,
energy: 100,
speed: 3,
color: Color.BRICK,
move: function() {
this.x += this.speed;
},
render: function() {
draw.fill(this.color);
draw.rectangle(this.x, this.y, this.width, this.height);
}
});
if (environment.id == 9) {
draw.item.player.x = environment.x;
draw.item.player.y = environment.y;
}
});
draw.text.time = draw.print();
draw.text.time.size = 4;
draw.text.time.opacity = 0.6;
draw.text.time.color = Color.WHITE;
draw.text.time.value = "00";
draw.text.index = draw.print();
draw.text.index.size = 6;
draw.text.index.color = Color.WHITE;
draw.text.index.value = (draw.input.index < 9 ? "0" : "") + (draw.input.index + 1);
draw.text.information = draw.print();
draw.text.information.size = 6;
draw.text.information.color = Color.WHITE;
draw.input.button.menu = draw.pixelset();
draw.input.button.menu.width = 10 * 5;
draw.input.button.menu.height = 10 * 5;
draw.input.button.menu.size = { width: 10, height: 10 };
draw.input.button.menu.data("1 FFFFFF.1 1 1 1 1/0 0 0 0 0/1 1 1 1 1/0 0 0 0 0/1 1 1 1 1.");
draw.input.button.menu.update();
draw.input.button.left = new Object();
draw.input.button.left.width = 40;
draw.input.button.left.height = 40;
draw.input.button.left.opacity = 0.6;
draw.input.button.left.color = Color.WHITE;
draw.input.button.left.render = function() {
draw.save().opacity(this.opacity).fill(this.color).rectangle(this.x, this.y, this.width, this.height).restore();
};
draw.input.button.right = new Object();
draw.input.button.right.width = 40;
draw.input.button.right.height = 40;
draw.input.button.right.opacity = 0.6;
draw.input.button.right.color = Color.WHITE;
draw.input.button.right.render = function() {
draw.save().opacity(this.opacity).fill(this.color).rectangle(this.x, this.y, this.width, this.height).restore();
};
draw.input.button.fire = new Object();
draw.input.button.fire.width = 40;
draw.input.button.fire.height = 40;
draw.input.button.fire.opacity = 0.6;
draw.input.button.fire.color = Color.WHITE;
draw.input.button.fire.render = function() {
draw.save().opacity(this.opacity).fill(this.color).rectangle(this.x, this.y, this.width, this.height).restore();
};
draw.input.button.up = new Object();
draw.input.button.up.width = 40;
draw.input.button.up.height = 40;
draw.input.button.up.opacity = 0.6;
draw.input.button.up.color = Color.WHITE;
draw.input.button.up.render = function() {
draw.save().opacity(this.opacity).fill(this.color).rectangle(this.x, this.y, this.width, this.height).restore();
};
draw.frame = 0; draw.ad = draw.ad ? draw.ad : 0; draw.width = draw.item.environment.size.width * 80; draw.height = draw.item.environment.size.height * 20;
};
layout.input = function() {
draw.input.action.menu = draw.input.pad(0, 17) || draw.input.key(27) || draw.click(draw.input.button.menu);
draw.input.action.fire = draw.input.pad(0, 9) || draw.input.key(32) || draw.click(draw.input.button.fire);
draw.input.action.left = draw.input.pad(0, 2) || draw.input.key(37) || draw.input.touch("left") || draw.click(draw.input.button.left);
draw.input.action.right = draw.input.pad(0, 0) || draw.input.key(39) || draw.input.touch("right") || draw.click(draw.input.button.right);
draw.input.action.up = draw.input.pad(0, 10) || draw.input.key(38) || draw.input.touch("up") || draw.click(draw.input.button.up);
if (draw.input.action.fire) if (draw.wait(10)) draw.item.fire.push({
x: draw.item.player.x + draw.item.player.width,
y: draw.item.player.y,
width: 10,
height: 10,
color: Color.WHITE,
move: function() {
this.x += 10;
},
render: function() {
draw.fill(this.color);
draw.rectangle(this.x, this.y, this.width, this.height);
}
});
if (draw.input.action.up) draw.input.button.up.opacity = 1; else draw.input.button.up.opacity = 0.6;
if (draw.input.action.right) draw.input.button.right.opacity = 1; else draw.input.button.right.opacity = 0.6;
if (draw.input.action.left) draw.input.button.left.opacity = 1; else draw.input.button.left.opacity = 0.6;
if (draw.input.action.fire) draw.input.button.fire.opacity = 1; else draw.input.button.fire.opacity = 0.6;
if (draw.input.action.up) if (draw.item.player.jumping == false) { draw.item.player.velocity.y = -12; draw.item.player.jumping = true; }
if (draw.input.action.right) if (draw.item.player.velocity.x < 4) draw.item.player.velocity.x += 1;
if (draw.input.action.left) if (draw.item.player.velocity.x > -4) draw.item.player.velocity.x -= 1;
if (draw.input.action.menu) draw.open(draw.layout["menu"]);
};
layout.update = function() {
draw.camera(draw.item.player, draw.canvas.width / 2, draw.canvas.height / 3);
draw.text.time.value = (Math.floor(draw.frame / 100) < 10 ? "0" : "") + Math.floor(draw.frame / 100);
draw.text.time.x = draw.viewport.x + draw.canvas.width / 2 - draw.text.time.width / 2;
draw.text.time.y = draw.viewport.y + draw.canvas.height - draw.text.time.height * 2;
draw.text.index.x = draw.viewport.x + draw.canvas.width - draw.text.index.width - 40 - 10;
draw.text.index.y = draw.viewport.y + 40 + 10;
draw.text.information.x = draw.viewport.x + draw.canvas.width / 2 - draw.text.information.width / 2;
draw.text.information.y = draw.viewport.y + draw.canvas.height / 2 - draw.text.information.height / 2;
draw.input.button.menu.x = draw.viewport.x + 40; draw.input.button.menu.y = draw.viewport.y + 40;
draw.input.button.left.x = draw.viewport.x + draw.input.button.left.width + 20;
draw.input.button.left.y = draw.viewport.y + draw.canvas.height - draw.input.button.left.height * 2;
draw.input.button.right.x = draw.viewport.x + draw.input.button.right.width * 3 + 20;
draw.input.button.right.y = draw.viewport.y + draw.canvas.height - draw.input.button.right.height * 2;
draw.input.button.up.x = draw.viewport.x + draw.canvas.width - draw.input.button.up.width * 4 - 20;
draw.input.button.up.y = draw.viewport.y + draw.canvas.height - draw.input.button.up.height * 2;
draw.input.button.fire.x = draw.viewport.x + draw.canvas.width - draw.input.button.fire.width * 2 - 20;
draw.input.button.fire.y = draw.viewport.y + draw.canvas.height - draw.input.button.fire.height * 2;
draw.item.player.move();
draw.item.player.grounded = false;
draw.item.environment.update();
draw.item.environment.each.forEach(function(environment) {
if (environment.id == 1) {
var direction = draw.collision(draw.item.player, environment);
if (direction == Align.LEFT || direction == Align.RIGHT) {
draw.item.player.velocity.x = 0;
} else if (direction == Align.BOTTOM) {
draw.item.player.jumping = false;
draw.item.player.grounded = true;
} else if (direction == Align.TOP) {
draw.item.player.velocity.y *= -1;
}
draw.item.fire.forEach(function(fire, index, array) {
if (draw.intersection(fire, environment)) array.splice(index, 1);
});
} else if (environment.id == 3) {
if (draw.intersection(draw.item.player, environment)) draw.action.stop = true;
} else if (environment.id == 4) {
if (draw.intersection(draw.item.player, environment)) draw.action.next = true;
}
if (environment.id == 1 || environment.id == 5) {
draw.item.enemy.forEach(function(enemy) {
var direction = draw.collision(enemy, environment);
if (direction == Align.LEFT || direction == Align.RIGHT) enemy.speed = -enemy.speed;
});
}
});
draw.item.enemy.forEach(function(value) {
value.move();
if (draw.intersection(value, draw.item.player)) draw.action.stop = true;
});
draw.item.fire.forEach(function(value, index, array) {
value.move();
draw.item.enemy.forEach(function(enemy, i, fire) {
if (draw.intersection(value, enemy)) { enemy.energy -= 10; array.splice(index, 1); }
if (enemy.energy < 0) fire.splice(i, 1);
});
});
if (Math.floor(draw.frame / 100) >= 10) draw.action.timeout = true;
if (draw.item.player.grounded) draw.item.player.velocity.y = 0;
if (draw.item.player.y > draw.height) draw.action.stop = true;
if (draw.action.stop) draw.item.player.color = Color.BRICK;
if (draw.action.stop) draw.text.information.value = "GAMEOVER";
if (draw.action.timeout) draw.text.information.value = "TIMEOUT";
if (draw.action.next) { draw.text.information.value = "COMPLETE"; draw.frame = 0; }
if (draw.action.next) if (draw.item.next.fade >= 2) { draw.input.index += 1; if (draw.input.index > Number(Cache.get("index"))) Cache.set("index", draw.input.index); }
if (draw.action.next) if (draw.item.next.fade < 2) draw.item.next.fade += 0.05; else layout.start();
if (draw.action.stop || draw.action.timeout) if (draw.ad > 0 && draw.ad % 6 == 0) if ("Ad" in window) Ad.publish();
if (draw.action.stop || draw.action.timeout) if (draw.item.stop.fade >= 2) draw.ad++;
if (draw.action.stop || draw.action.timeout) if (draw.item.stop.fade < 2) draw.item.stop.fade += 0.05; else layout.start();
draw.each = new Array();
draw.each.push(draw.item.background);
draw.each.push(draw.item.environment);
draw.each.push(draw.item.player);
draw.item.fire.forEach(function(value) {
draw.each.push(value);
});
draw.item.enemy.forEach(function(value) {
draw.each.push(value);
});
draw.each.push(draw.text.time);
draw.each.push(draw.text.index);
draw.each.push(draw.input.button.menu);
draw.each.push(draw.input.button.left);
draw.each.push(draw.input.button.right);
draw.each.push(draw.input.button.up);
draw.each.push(draw.input.button.fire);
if (draw.action.next) draw.each.push(draw.item.next);
if (draw.action.stop || draw.action.timeout) draw.each.push(draw.item.stop);
if (draw.action.stop || draw.action.next || draw.action.timeout) draw.each.push(draw.text.information);
};
layout.render = function() {
draw.clear();
draw.each.forEach(function(value) {
if (value && value.render) value.render();
});
};
return layout;
};
draw.layout["game"] = function() {
var layout = new Object();
layout.start = function() {
draw.input.into(draw.canvas).gamepad().keydown().keyup().touchmove().touchdown().touchup();
draw.input.index = Number(Cache.get("index")); draw.input.index = (draw.input.index >= 14 ? 0 : draw.input.index);
draw.item.background = new Object();
draw.item.background.render = function() {
draw.fill(Color.DARK).rectangle(0, 0, draw.width, draw.height);
};
draw.item.animation = new Object();
draw.item.animation.particles = new Array();
for (var i = 0; i < 100; i++) {
draw.item.animation.particles.push({
x: Random(draw.canvas.width),
y: Random(draw.canvas.height - 40),
speed: Random(4, 10),
size: 40
});
}
draw.item.animation.update = function() {
for (var i = 0; i < this.particles.length; i++) {
var particle = this.particles[i];
if (i % 2) particle.x += particle.speed; else particle.x -= particle.speed;
if (particle.x < -particle.size) particle.x = draw.canvas.width + particle.size;
if (particle.y < -particle.size) particle.y = draw.canvas.height + particle.size;
if (particle.x > draw.canvas.width + particle.size) particle.x = -particle.size;
if (particle.y > draw.canvas.height + particle.size) particle.y = -particle.size;
}
};
draw.item.animation.render = function() {
draw.fill(Color.GREY);
for (var i = 0; i < this.particles.length; i++) {
var particle = this.particles[i];
draw.rectangle(particle.x, particle.y, particle.size, particle.size);
}
};
draw.text.name = draw.print();
draw.text.name.size = 8;
draw.text.name.padding = 8;
draw.text.name.color = Color.GREY;
draw.text.name.value = "PIXELPUNK";
draw.text.name.background.size = 8;
draw.text.name.background.color = Color.DARK;
draw.text.name.background.border = Color.GREY;
};
layout.input = function() {
if (draw.input.keys.length || draw.input.touches.length || draw.input.pad(0, 10)) draw.open(draw.layout["menu"]);
};
layout.update = function() {
draw.item.animation.update();
if (draw.load) draw.text.name.color = Color.WHITE;
if (draw.load) draw.text.name.background.border = Color.WHITE;
draw.text.name.x = draw.canvas.width / 2 - draw.text.name.width / 2;
draw.text.name.y = draw.canvas.height / 2 - draw.text.name.height / 2;
draw.each = new Array();
draw.each.push(draw.item.background);
draw.each.push(draw.item.animation);
draw.each.push(draw.text.name);
};
layout.render = function() {
draw.clear();
draw.each.forEach(function(value) {
if (value) value.render();
});
};
return layout;
};
Hapa ndio tatizo lilipoanziaNimetumia language yangu na game engine yangu mwenyewe. Soon nitaiweka iwe open source nakuwafundisha wengine kuitumia pia for free
Baada ya kuchunguza code vizuri pia nimegundua kitu kimoja, hata hizo code nilizokuonyesha hapo juu ni za JavaScript engine ya mtu mwingine so hata zenyewe sio zako duh! Umechukua engine ambayo inatumia webview kurender kwenye mobile phone ukasema ni yako na language umetengeneza mwenyewe, hahaha man acha utoto.
Nadhani discussion imeisha, tumeshakushika case closed. Tukiendelea kubishana kuhusu hili nitakublock tu maana sijui utakuja na explanation gani code zote nimezipata ziko wazi na hata kuminify hukufanya hivyo.
Nilichofanya nimeanza kutengeneza game engine ya pure javascript ya 2d canvas for webview nakuitengenezea compiler ambayo ina compile my language to javascript kuweza ku call functions za game engine yangu ambayo in javascript. Pia natengeneza engine ambayo iko in java ili niache kutumia webview, nlishaanza kuitengeneza kitambo inatumia 2d canvas ya android java. Pia nimetengeneza framework yakutengeneza apps za android bila xml for layout na sio za webview. Zinatumia pure java mfano LinearLayout layout = new LinearLayout(this);Siumii chochote tena not on this discussion, style yangu ya kuandika tu izoee.
Facebook na Google wanatumia frameworks zao ila sio 100% ni more like 50% nyingi wameziopen source zinapokea contribution toka kwa developers dunia nzima. Narudia tena nimefanya kazi na big companies, sijawahi deal na Facebook ila nimedeal na Google, lakini wote wanafanya the same thing, ukiingia Facebook language wanazotumia ni zilezile made by other people, C, C++, Php(dying), JavaScript, wamejaribu kufanya improvements to these languages ndiyo ila ni open contribution toka kwa devs dunia nzima, that's how software is made. Same for Google, siku hizi wanajitahidi kutumia Golang lakini ujue yenyewe pia ni openn source project japo ni made by Google employees, inapokea contributions worldwide.
The reason ni simple, when it comes to software development most of the times nothing beats open source na hakuna anayependa kure-invent the wheels, kitu kama kishatengenezwa na kinafanya kazi vizuri hakuna haja ya kukifix, facebook walijaribu kufix php sababu it was shit, super slow na buggy, google walijaribu kutengeneza Javascript engine sababu javascript on the browser has always been slow haikuweza ku-keep up na exponential development kwenye hardware side. Sasa wewe unajifanya unakuja na tools zako mwenyewe kusolve tatizo lipi hasa? em nitajie jina la algorithm hata moja uliyotumia kwenye rendering system yako tujue. Tatizo unatudanganya
Mwanangu unafanya nijikubali sana kwa maana imekuwa ngumu sana kuamini izo code nimeandika mimi. Kama unahisi nime copy embu nionyeshe wapi nime copy?Haya nimerudi, nilikwambia nitakushika unadhani nilikua natania, labda hujui unachoongelea mkuu ndicho kitu nimegundua kutoka kwako.
Kwanza kujibu swala lako sijasema wanachofanya wazungu sisi hatuwezi nope, tunaweza sana tu, nimeshiriki competition kibao na hao wazungu unaowasema hata silicon valley nyingine team yangu ikashinda nyingine tuka-lose, knowledge mtu yeyote yule anaweza kua nayo na akawa the best kwa anachokifanya hata kama kazaliwa kijijini.
Nachopinga mimi ni kimoja tu, kutudanganya basi. Umesema umetengeneza language yako na game engine yako mwenyewe si ndiyo? Sasa nimedecompile apk nzima nimeiona, hiyo language unayosema umetengeneza na game engine yako unamaanisha JavaScript? na kutumia javascript canvas kudraw? Toka lini JavaScript ikawa your language mzee?
Sasa usijesema ninakusingizia proof hii hapa, code yako yote hii hapa.
Tuanze na main.js file
Code:draw.layout["main"] = function() { var layout = new Object(); layout.start = function() { draw.input.index = draw.data[draw.input.index] ? draw.input.index : 0; draw.action.next = false; draw.action.stop = false; draw.action.timeout = false; draw.item.background = new Object(); draw.item.background.render = function() { draw.fill(Color.GREY).rectangle(0, 0, draw.width, draw.height); }; draw.item.stop = new Object(); draw.item.stop.fade = 0.1; draw.item.stop.render = function() { draw.save().opacity(this.fade < 1 ? this.fade : 1).fill(Color.BRICK).rectangle(0, 0, draw.width, draw.height).restore(); }; draw.item.next = new Object(); draw.item.next.fade = 0.1; draw.item.next.render = function() { draw.save().opacity(this.fade < 1 ? this.fade : 1).fill(Color.WATER).rectangle(0, 0, draw.width, draw.height).restore(); }; draw.item.player = new Object(); draw.item.player.x = 20 * 8; draw.item.player.y = 20 * 6; draw.item.player.width = 20; draw.item.player.height = 20; draw.item.player.grounded = false; draw.item.player.velocity = { x: 0, y: 0 }; draw.item.player.color = Color.DARK; draw.item.player.friction = 0.8; draw.item.player.gravity = 0.98; draw.item.player.move = function() { this.x += this.velocity.x; this.y += this.velocity.y; this.velocity.x *= this.friction; this.velocity.y += this.gravity; }; draw.item.player.render = function() { draw.fill(this.color); draw.rectangle(this.x, this.y, this.width, this.height); }; draw.item.fire = new Array(); draw.item.enemy = new Array(); draw.item.environment = draw.pixelset(); draw.item.environment.x = 0; draw.item.environment.y = 0; draw.item.environment.size = { width: 20, height: 20 }; draw.item.environment.data(draw.data[draw.input.index]); draw.item.environment.update(); draw.item.environment.each.forEach(function(environment) { if (environment.id == 6) draw.item.enemy.push({ x: environment.x, y: environment.y + environment.height - 30, width: 30, height: 30, energy: 100, speed: 3, color: Color.BRICK, move: function() { this.x += this.speed; }, render: function() { draw.fill(this.color); draw.rectangle(this.x, this.y, this.width, this.height); } }); if (environment.id == 9) { draw.item.player.x = environment.x; draw.item.player.y = environment.y; } }); draw.text.time = draw.print(); draw.text.time.size = 4; draw.text.time.opacity = 0.6; draw.text.time.color = Color.WHITE; draw.text.time.value = "00"; draw.text.index = draw.print(); draw.text.index.size = 6; draw.text.index.color = Color.WHITE; draw.text.index.value = (draw.input.index < 9 ? "0" : "") + (draw.input.index + 1); draw.text.information = draw.print(); draw.text.information.size = 6; draw.text.information.color = Color.WHITE; draw.input.button.menu = draw.pixelset(); draw.input.button.menu.width = 10 * 5; draw.input.button.menu.height = 10 * 5; draw.input.button.menu.size = { width: 10, height: 10 }; draw.input.button.menu.data("1 FFFFFF.1 1 1 1 1/0 0 0 0 0/1 1 1 1 1/0 0 0 0 0/1 1 1 1 1."); draw.input.button.menu.update(); draw.input.button.left = new Object(); draw.input.button.left.width = 40; draw.input.button.left.height = 40; draw.input.button.left.opacity = 0.6; draw.input.button.left.color = Color.WHITE; draw.input.button.left.render = function() { draw.save().opacity(this.opacity).fill(this.color).rectangle(this.x, this.y, this.width, this.height).restore(); }; draw.input.button.right = new Object(); draw.input.button.right.width = 40; draw.input.button.right.height = 40; draw.input.button.right.opacity = 0.6; draw.input.button.right.color = Color.WHITE; draw.input.button.right.render = function() { draw.save().opacity(this.opacity).fill(this.color).rectangle(this.x, this.y, this.width, this.height).restore(); }; draw.input.button.fire = new Object(); draw.input.button.fire.width = 40; draw.input.button.fire.height = 40; draw.input.button.fire.opacity = 0.6; draw.input.button.fire.color = Color.WHITE; draw.input.button.fire.render = function() { draw.save().opacity(this.opacity).fill(this.color).rectangle(this.x, this.y, this.width, this.height).restore(); }; draw.input.button.up = new Object(); draw.input.button.up.width = 40; draw.input.button.up.height = 40; draw.input.button.up.opacity = 0.6; draw.input.button.up.color = Color.WHITE; draw.input.button.up.render = function() { draw.save().opacity(this.opacity).fill(this.color).rectangle(this.x, this.y, this.width, this.height).restore(); }; draw.frame = 0; draw.ad = draw.ad ? draw.ad : 0; draw.width = draw.item.environment.size.width * 80; draw.height = draw.item.environment.size.height * 20; }; layout.input = function() { draw.input.action.menu = draw.input.pad(0, 17) || draw.input.key(27) || draw.click(draw.input.button.menu); draw.input.action.fire = draw.input.pad(0, 9) || draw.input.key(32) || draw.click(draw.input.button.fire); draw.input.action.left = draw.input.pad(0, 2) || draw.input.key(37) || draw.input.touch("left") || draw.click(draw.input.button.left); draw.input.action.right = draw.input.pad(0, 0) || draw.input.key(39) || draw.input.touch("right") || draw.click(draw.input.button.right); draw.input.action.up = draw.input.pad(0, 10) || draw.input.key(38) || draw.input.touch("up") || draw.click(draw.input.button.up); if (draw.input.action.fire) if (draw.wait(10)) draw.item.fire.push({ x: draw.item.player.x + draw.item.player.width, y: draw.item.player.y, width: 10, height: 10, color: Color.WHITE, move: function() { this.x += 10; }, render: function() { draw.fill(this.color); draw.rectangle(this.x, this.y, this.width, this.height); } }); if (draw.input.action.up) draw.input.button.up.opacity = 1; else draw.input.button.up.opacity = 0.6; if (draw.input.action.right) draw.input.button.right.opacity = 1; else draw.input.button.right.opacity = 0.6; if (draw.input.action.left) draw.input.button.left.opacity = 1; else draw.input.button.left.opacity = 0.6; if (draw.input.action.fire) draw.input.button.fire.opacity = 1; else draw.input.button.fire.opacity = 0.6; if (draw.input.action.up) if (draw.item.player.jumping == false) { draw.item.player.velocity.y = -12; draw.item.player.jumping = true; } if (draw.input.action.right) if (draw.item.player.velocity.x < 4) draw.item.player.velocity.x += 1; if (draw.input.action.left) if (draw.item.player.velocity.x > -4) draw.item.player.velocity.x -= 1; if (draw.input.action.menu) draw.open(draw.layout["menu"]); }; layout.update = function() { draw.camera(draw.item.player, draw.canvas.width / 2, draw.canvas.height / 3); draw.text.time.value = (Math.floor(draw.frame / 100) < 10 ? "0" : "") + Math.floor(draw.frame / 100); draw.text.time.x = draw.viewport.x + draw.canvas.width / 2 - draw.text.time.width / 2; draw.text.time.y = draw.viewport.y + draw.canvas.height - draw.text.time.height * 2; draw.text.index.x = draw.viewport.x + draw.canvas.width - draw.text.index.width - 40 - 10; draw.text.index.y = draw.viewport.y + 40 + 10; draw.text.information.x = draw.viewport.x + draw.canvas.width / 2 - draw.text.information.width / 2; draw.text.information.y = draw.viewport.y + draw.canvas.height / 2 - draw.text.information.height / 2; draw.input.button.menu.x = draw.viewport.x + 40; draw.input.button.menu.y = draw.viewport.y + 40; draw.input.button.left.x = draw.viewport.x + draw.input.button.left.width + 20; draw.input.button.left.y = draw.viewport.y + draw.canvas.height - draw.input.button.left.height * 2; draw.input.button.right.x = draw.viewport.x + draw.input.button.right.width * 3 + 20; draw.input.button.right.y = draw.viewport.y + draw.canvas.height - draw.input.button.right.height * 2; draw.input.button.up.x = draw.viewport.x + draw.canvas.width - draw.input.button.up.width * 4 - 20; draw.input.button.up.y = draw.viewport.y + draw.canvas.height - draw.input.button.up.height * 2; draw.input.button.fire.x = draw.viewport.x + draw.canvas.width - draw.input.button.fire.width * 2 - 20; draw.input.button.fire.y = draw.viewport.y + draw.canvas.height - draw.input.button.fire.height * 2; draw.item.player.move(); draw.item.player.grounded = false; draw.item.environment.update(); draw.item.environment.each.forEach(function(environment) { if (environment.id == 1) { var direction = draw.collision(draw.item.player, environment); if (direction == Align.LEFT || direction == Align.RIGHT) { draw.item.player.velocity.x = 0; } else if (direction == Align.BOTTOM) { draw.item.player.jumping = false; draw.item.player.grounded = true; } else if (direction == Align.TOP) { draw.item.player.velocity.y *= -1; } draw.item.fire.forEach(function(fire, index, array) { if (draw.intersection(fire, environment)) array.splice(index, 1); }); } else if (environment.id == 3) { if (draw.intersection(draw.item.player, environment)) draw.action.stop = true; } else if (environment.id == 4) { if (draw.intersection(draw.item.player, environment)) draw.action.next = true; } if (environment.id == 1 || environment.id == 5) { draw.item.enemy.forEach(function(enemy) { var direction = draw.collision(enemy, environment); if (direction == Align.LEFT || direction == Align.RIGHT) enemy.speed = -enemy.speed; }); } }); draw.item.enemy.forEach(function(value) { value.move(); if (draw.intersection(value, draw.item.player)) draw.action.stop = true; }); draw.item.fire.forEach(function(value, index, array) { value.move(); draw.item.enemy.forEach(function(enemy, i, fire) { if (draw.intersection(value, enemy)) { enemy.energy -= 10; array.splice(index, 1); } if (enemy.energy < 0) fire.splice(i, 1); }); }); if (Math.floor(draw.frame / 100) >= 10) draw.action.timeout = true; if (draw.item.player.grounded) draw.item.player.velocity.y = 0; if (draw.item.player.y > draw.height) draw.action.stop = true; if (draw.action.stop) draw.item.player.color = Color.BRICK; if (draw.action.stop) draw.text.information.value = "GAMEOVER"; if (draw.action.timeout) draw.text.information.value = "TIMEOUT"; if (draw.action.next) { draw.text.information.value = "COMPLETE"; draw.frame = 0; } if (draw.action.next) if (draw.item.next.fade >= 2) { draw.input.index += 1; if (draw.input.index > Number(Cache.get("index"))) Cache.set("index", draw.input.index); } if (draw.action.next) if (draw.item.next.fade < 2) draw.item.next.fade += 0.05; else layout.start(); if (draw.action.stop || draw.action.timeout) if (draw.ad > 0 && draw.ad % 6 == 0) if ("Ad" in window) Ad.publish(); if (draw.action.stop || draw.action.timeout) if (draw.item.stop.fade >= 2) draw.ad++; if (draw.action.stop || draw.action.timeout) if (draw.item.stop.fade < 2) draw.item.stop.fade += 0.05; else layout.start(); draw.each = new Array(); draw.each.push(draw.item.background); draw.each.push(draw.item.environment); draw.each.push(draw.item.player); draw.item.fire.forEach(function(value) { draw.each.push(value); }); draw.item.enemy.forEach(function(value) { draw.each.push(value); }); draw.each.push(draw.text.time); draw.each.push(draw.text.index); draw.each.push(draw.input.button.menu); draw.each.push(draw.input.button.left); draw.each.push(draw.input.button.right); draw.each.push(draw.input.button.up); draw.each.push(draw.input.button.fire); if (draw.action.next) draw.each.push(draw.item.next); if (draw.action.stop || draw.action.timeout) draw.each.push(draw.item.stop); if (draw.action.stop || draw.action.next || draw.action.timeout) draw.each.push(draw.text.information); }; layout.render = function() { draw.clear(); draw.each.forEach(function(value) { if (value && value.render) value.render(); }); }; return layout; };
Umechukua android, ukaweka webview kwenye MainActivity, then kwenye hiyo webview ukatengeneza HTML file, ukatumia JavaScript canvas kuchora kila kitu kinachoonekana kwenye game. Hakuna engine hakuna nini, ni just simple JavaScript kua move hapa kua na color hii basi.
Hii hapa game.js file
Code:draw.layout["game"] = function() { var layout = new Object(); layout.start = function() { draw.input.into(draw.canvas).gamepad().keydown().keyup().touchmove().touchdown().touchup(); draw.input.index = Number(Cache.get("index")); draw.input.index = (draw.input.index >= 14 ? 0 : draw.input.index); draw.item.background = new Object(); draw.item.background.render = function() { draw.fill(Color.DARK).rectangle(0, 0, draw.width, draw.height); }; draw.item.animation = new Object(); draw.item.animation.particles = new Array(); for (var i = 0; i < 100; i++) { draw.item.animation.particles.push({ x: Random(draw.canvas.width), y: Random(draw.canvas.height - 40), speed: Random(4, 10), size: 40 }); } draw.item.animation.update = function() { for (var i = 0; i < this.particles.length; i++) { var particle = this.particles[i]; if (i % 2) particle.x += particle.speed; else particle.x -= particle.speed; if (particle.x < -particle.size) particle.x = draw.canvas.width + particle.size; if (particle.y < -particle.size) particle.y = draw.canvas.height + particle.size; if (particle.x > draw.canvas.width + particle.size) particle.x = -particle.size; if (particle.y > draw.canvas.height + particle.size) particle.y = -particle.size; } }; draw.item.animation.render = function() { draw.fill(Color.GREY); for (var i = 0; i < this.particles.length; i++) { var particle = this.particles[i]; draw.rectangle(particle.x, particle.y, particle.size, particle.size); } }; draw.text.name = draw.print(); draw.text.name.size = 8; draw.text.name.padding = 8; draw.text.name.color = Color.GREY; draw.text.name.value = "PIXELPUNK"; draw.text.name.background.size = 8; draw.text.name.background.color = Color.DARK; draw.text.name.background.border = Color.GREY; }; layout.input = function() { if (draw.input.keys.length || draw.input.touches.length || draw.input.pad(0, 10)) draw.open(draw.layout["menu"]); }; layout.update = function() { draw.item.animation.update(); if (draw.load) draw.text.name.color = Color.WHITE; if (draw.load) draw.text.name.background.border = Color.WHITE; draw.text.name.x = draw.canvas.width / 2 - draw.text.name.width / 2; draw.text.name.y = draw.canvas.height / 2 - draw.text.name.height / 2; draw.each = new Array(); draw.each.push(draw.item.background); draw.each.push(draw.item.animation); draw.each.push(draw.text.name); }; layout.render = function() { draw.clear(); draw.each.forEach(function(value) { if (value) value.render(); }); }; return layout; };
Nimeanza hadi ku-doubt kua hiyo code umeandika mwenyewe coz kuna parts nyingi ni very clean, ila kama umeandika yote mwenyewe then nitakuponngeza coz napenda clean JavaScript. Japo acha kutudanganya, it's not a good thing tupo hapa tunakukamata uongo wako anytime.
Kama unataka files zote za JS ulizoandika sema tukuletee hapa.
I even doubt umeandika though. Nategemea uje na fix nyingine kua language yako ukicompile inaproduce hizi code zote hahaha nitacheka balaa.
Naisubiri na mimi hiyo counter attack ili nije na round 5 kummaliza kabisa.
Hapa wanabishana wanaojua daa haya ndiyo mambo
Aya ngoja nkuonyeshe syntax za language yangu, na source code za compiler yake. Ubishi uisheView attachment 1421392View attachment 1421393
Nilichofanya nimeanza kutengeneza game engine ya pure javascript ya 2d canvas for webview nakuitengenezea compiler ambayo ina compile my language to javascript kuweza ku call functions za game engine yangu ambayo in javascript. Pia natengeneza engine ambayo iko in java ili niache kutumia webview, nlishaanza kuitengeneza kitambo inatumia 2d canvas ya android java. Pia nimetengeneza framework yakutengeneza apps za android bila xml for layout na sio za webview. Zinatumia pure java. Kama unaelewa icho kitu kwamba unaweza tengeneza mfano bila but ukatumia pure java mfano LinearLayout layout = new LinearLayout(this);