Jump to content
php.lv forumi

Praogrammetājs ar Flash zināšanām


sandrulis

Recommended Posts

Vai ir kāds nopietns iemesls kāpēc jāizvēlas tieši flash? Vai tiks izmantota kaut kāda animācija vai vēl kādas fīčas, ko nespēj nodrošināt JavaScript?

Bet ja no nulles, tad:

1) servera versiju varētu izveidot pa 4-8 dienām. Kas tikai atbild par spēli, saglabā katru partiju datubāzē.

2) servera daļu, kas skaita statistiku (punkti spēlē, izspēlētas spēles utt), varētu uztaisīt pa 2-4 dienām.

3) klienta variants varētu aizņemt 4-8 dienas. Kur ietilpst galda izvēle, galda spēle, ielogošanas daļa.

 

Kopā sanāk 10-20 dienas = 80-160 stundas, ja prasa 10ls/h, tad sanāk no 800ls līdz 1600 ls.

Link to comment
Share on other sites

Piekritu nemec teiktajam un ja tas vel tas ir flasha, tad droshi + 400ls par flash animacijam.

Link to comment
Share on other sites

Pa nedēļu uzbliezt klienta daļu? Nu varjaubūt... Tīri intuitīvi (izpētē ieslīgt patlaban nav vēlmes) tik optimistiski tempi man liekas apšabāmi. Augstas veiktspējas zoli (@draugiem.lv) servera daļu arī neuzkodēsi dažās dienās.

 

JavaScript`iskai klienta daļai mīnuss tāds, ka nepārtraukti ir jāvaicā serverim vai nav izmaiņas spēlē - tas ir papildus resursi un spēle arī nebūs diezko baudāma.

Link to comment
Share on other sites

Ja esi labs draugs JavaScriptam, tad ar klienta daļu nevajadzētu būt problēmu.

Ko tad nozīmē ne augstas veikspējas, speciāli sarakstīts sūda kods? un @draugiem.lv ir kāds rādītājs zoles taisīšanā? :) . Pats nesen saražoju servera daļu zolei, neiešu zīmēties, bet man tas aizņēma 2 dienas, pārējo laiku var atstāt testiem. Vispār šos laikus es ņēmu no savas pieredzes. Kad piebeigšu savu zoli, tad arī šeit kaut kur ielikšu saites.

 

JavaScriptam var uzrakstīt tuneli caur flashu un lietot socketus cik vien gribi.

 

AS2 kods:

import flash.external.*;
ExternalInterface.addCallback('socketConnect', null, xsocketConnect);
ExternalInterface.addCallback('socketSendData', null, xsocketSendData);
mySocket = new XMLSocket();
mySocket.onConnect = function(success) {
	if (success) {
		connectionStatus('established');
	} else {
		connectionStatus('failed');
	}
};
mySocket.onClose = function() {
	connectionStatus('lost');
};
function xsocketConnect(p){
	connectionStatus('connecting');
	mySocket.connect(p.split(':')[0], p.split(':')[1]);
}
XMLSocket.prototype.onData = function(msg) {
	trace(msg);
	ExternalInterface.call(_root.fireCallback, ["socketOnData", msg]);
};
function xsocketSendData(msg){
	mySocket.send(msg);
}
function connectionStatus(msg){
	trace(msg);
	ExternalInterface.call(_root.fireCallback, ["socketStatus", msg]);
}
ExternalInterface.call(_root.fireCallback, ["loaded"]);

un MooTools plugins tam:

Swiff.Connector = new Class({
    Extends: Swiff,
    Implements: Events,
    options: {
        path: 'connector.swf',
        target: null,
        height: 1,
        width: 1,
        callBacks: null,
        host: 'localhost',
        port: '8080',
        params: {
            wMode: 'opaque',
            menu: 'false',
            allowScriptAccess: 'always'
        }
    },
    initialize: function(options) {
        this.setOptions(options);
        if (this.options.callBacks) {
            Hash.each(this.options.callBacks, function(fn, name) {
                this.addEvent(name, fn);
            }, this);
        }
        this.options.callBacks = {
            fireCallback: this.fireCallback.bind(this)
        };
        var path = this.options.path;
        if (!path.contains('?')) path += '?noCache=' + $time(); // cache in IE
        this.parent(path);
        // container options for Swiff class
        this.options.container = this.box = new Element('span', {'class': 'connector-box'}).inject($(this.options.container) || document.body);
        this.inject(this.box);
    },
    fireCallback: function(fArg) {
        var name = fArg[0];
        var args = fArg.length>1 ? fArg[1] : fArg[1];
        this.fireEvent(name, args);
    },
    connect: function(){
        this.communicator().socketConnect(this.options.host+':'+this.options.port);
    },
    send: function(msg){
        this.communicator().socketSendData(msg);
    },
    communicator: function() {
        var movieName = this.id;
        if (Browser.Engine.trident) {
            return window[movieName]
        } else {
            return document[movieName]
        }
    }
});

 

Lietot to var šādi:

 

var swiffConnector = new Swiff.Connector({
    'path': 'connector.swf' // as2 compiled code path
    , 'container': $('connector') // swf container
    , 'host': '192.168.1.51'
    , 'port': '9999'
    , onLoaded: function(){
        //swf connector loaded
    }
    , onSocketStatus: function(status){
        //possible status - 'connecting', 'lost', 'established', 'failed'
    }
    , onSocketOnData: function(dt){
        //dt - data received from server
    }
});
swiffConnector.send('some data');// send to host

Edited by nemec
Link to comment
Share on other sites

Es teiktu tā, ka zolei nav kaut kādu dižu aprēķinu lai tur būtu vieta īpaši iespringst. Nedaudz sarežģītāk par čatu :). Tu @draugiem.lv zoli taisīji, ka tā aizstāvi, ka tur ir kaut kādas veikspējas nežēlīgas? Apskatījos, un tur sēž 1000 lietotāju. Vai tad tas ir daudz?

 

Tik pat stabils, cik stabili ir flash socketi + flash komunikācija ar javascript. Aprēķinu man nav. Bet ne ar vienu, ne otru problēmas nav bijušas.

Man ir tādas aizdomas, ka google wave tieši tā pat strādās.

Link to comment
Share on other sites

Apache servera variantā nav vajadzīgs, jo php (kam patīk java, pythons utt) pats pa sevi tačū būs serveris. mysql vajadzīgs tikai lai saglabāt rezultātus, kas varētu notikt tikai partijas beigās, vai arī tad kad istaba ir tukša vai arī vispār neko nesaglabāt, ja nav vajadzīga statistika. Paliek tikai pats serveris, kas ir rakstīts kaut kādā valodā. Tādam serverim 600 pieprasījumi sekundē no klienta puses ir tīrais nieks :)

Link to comment
Share on other sites

Lai arī 600/sec šķiet tīrais nieks, tas

1) nav ar "standarta" risinājumiem - bikiņ jāpasēž un jāpadomā :)

2) "peak" stundās tas var mierīgi izstiepties trīs reizes vairāk

 

Bet vispār Tu mani pārliecināji, bet gribētu redzēt Tavējo zoli, ja var. Cerams, tas nav kārtējais ultra-mega-top-secret companies-policy-breaker :)

Link to comment
Share on other sites

tas nav nekāds top-secret, jo taisu kārtējo reizi savam priekam, tāpec protams iedošu visiem novērtēt attiecīgajā sadaļā. Vienīgā problēma, ka zole man ir tālu no primāriem uzdevumiem un visticamāk nenesīs nekādu materiālo labumu, tāpēc taisu es to baigi reti (šobrīd statuss ir 50% :)).

Edited by nemec
Link to comment
Share on other sites

Pirmkārt, ja izvēlas taisīt zoli (vai gandrīz jebkuru citu spēli) web klienta pusē, tad droši vien pareizā izvēle būtu Flash, jo Java appleti šim nolūkam nebūs tik progresīvi (pārāk lēni tomēr...). Tā kā uz Flash neko netaisu un netaisos taisīt, tad arī neņemos spriezt, cik ilgi. :)

Tikpat labi varat uztaisīt arī "downloadojamu" aplikāciju, kuru klients izmanto uz sava kompja, ieinstallējot to vispirms. Pluss varētu būt tāds, ka varētu iespējams nodrošināt labāku veiktspēju.

Link to comment
Share on other sites

  • 2 weeks later...

Ja kāds veic programmisko pusi kādam ar kāršu spēlēm/azartspēlēm saistītam interaktīvam web bāzētam projektam, ar prieku piedalīšos projektā no savas puses piedāvājot visus nepieciešamos vizuālos risinājumus. :)

Link to comment
Share on other sites

Pirmkārt, ja izvēlas taisīt zoli (vai gandrīz jebkuru citu spēli) web klienta pusē, tad droši vien pareizā izvēle būtu Flash, jo Java appleti šim nolūkam nebūs tik progresīvi (pārāk lēni tomēr...)

 

nu pilnīgākās muļķības... Java no Flash neko neatšķirās.. JAVA varbūt arī ielādējās lēnāk, bet lēna tā toč nav! [un nav starpības aplets vai java aplikācija.. kods šamai izpildās vienlīdz labi, atšķirība ir tikai ar tiesībām un bāzes klases īpatnībām]

 

Zoli neprotu, tāpēc gruti pateikt, cik sarezgiti Flašā sazīmēt to štruntu..

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...