Nimetengeneza game nakuliweka Play Store

Mkuu nitakucheki
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

Sent using Jamii Forums mobile app
 
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

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.
 
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.
 
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.

Moderator wa huu mtanange niko hapa, tunasubiri counter attack kutoka kwa kijana machachari Hackboy.

Ndo kwanza tuko round ya 4.
 
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
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);
 
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.
Mwanangu unafanya nijikubali sana kwa maana imekuwa ngumu sana kuamini izo code nimeandika mimi. Kama unahisi nime copy embu nionyeshe wapi nime copy?
 
Duu kweli safari bado ngumu...... Usiende kwa nguvu ya ndumu.....
Screenshot_20200417_102400_app.pixelpunk.jpeg


Sent using Jamii Forums mobile app
 
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);

Naona umeanza kutubadilishia story, basi aisee naishia hapa, ulianza kutuambia umetengeneza language yako mwenyewe, ukatengeneza engine yako mwenyewe, sasa hivi unabadilisha kusema umetumia pure javascript kutengeneza game engine hahaha. Then umeanza kusema inatumia 2D canvas ya Android.

Come on man which is which? mbona maelezo kibao ambayo ni inconsistent? Alafu unabadili story unakuja kutuambia una app ya kutengeneza android UI bila webview, hahaha kwani toka Android ianzishwe uliambiwa ni lazima kutumia XML? Hujawahi sikia dynamic views? toka Android 1.0 tulikua tunatengeneza UI kwa kutumia pure Java, 10 years later sio hata discussion hiyo, XML ni basi tu tunatumia kama inarahisisha mambo ila sio lazima.

Mkuu nimegundua kitu kimoja, bado upo shallow sana, kama ushauri tu acha uongo, acha kujidai, kaa endelea kukomaa, mwanzo mzuri utafika mbali ukiendelea kujituma, nakupongeza kwa kuonyesha bidii na nnipo tayari kukupa support coz napenda kuona programmers bongo. Just stop lying to people kua unajua kufanya kitu flani huku hujui, umetuma hadi code unasema umetengeneza compiler alafu sasa hivi nimekushika uanjifanya kubadilisha kusema umetumia JavaScript? hahaha man ningekua wewe ningeacha kujibu kabisa nikapotea coz unazidi kujiharibia. Nitakuja kukutajia hadi game engine uliyotumia utafute excuse nyingine.

Stop it.
 
Back
Top Bottom