Flash professional

Programovacie jazyky, rady, poradňa...
yanci12
Amateur
Amateur
Príspevky: 11
Registrovaný: 17 okt 2011, 16:48

Flash professional

Príspevok od používateľa yanci12 »

zdravim , vedel by mi niekto pomoct s flashom? Chcel by som vyrobit hru - pexeso. Akurat neviem ako dosiahnem toho aby sa mi pri kazdej novej hre obrazky nahodne menili. Dik
weroro
Flash coder
Flash coder
Používateľov profilový obrázok
Príspevky: 3206
Registrovaný: 14 feb 2009, 22:34
Bydlisko: Bratislava
Kontaktovať používateľa:

Re: Flash professional

Príspevok od používateľa weroro »

V akej verzii ActionScript programuješ?
yanci12
Amateur
Amateur
Príspevky: 11
Registrovaný: 17 okt 2011, 16:48

Re: Flash professional

Príspevok od používateľa yanci12 »

v 2. Som uplny zaciatocnik a zatial som skusal len jednoduche ulohy- nejake tlacitka, pohybujuce sa objekty a tak. Viem ze na tvorbu hry je to nedostacujuce a preto by som potreboval pomoc. Ale myslim ze 3 sa nejak moc neodlisuje v principe od dvojky.
weroro
Flash coder
Flash coder
Používateľov profilový obrázok
Príspevky: 3206
Registrovaný: 14 feb 2009, 22:34
Bydlisko: Bratislava
Kontaktovať používateľa:

Re: Flash professional

Príspevok od používateľa weroro »

Keby sa AS3 veľmi neodlišoval od AS2, tak by som sa ťa nepýtal na verziu v ktorej programuješ, pretože je tam dosť veľký rozdiel. :)

K téme:

V AS2 neexistuje funkcia ktorou by si dokázal náhodne zamiešať pole prvkov. Preto je potrebné si takú funkciu naprogramovať (podobne ako aj funkciu na cúvacie vo flashi).

Tu som ti napísal triedu, ktorá slúži na náhodné zamiešanie pola.

Kód: Vybrať všetko

class MojePole extends Array
{
    private var length:Number;
    private var i:Number;
    function MojePole ()
    {
        super ();
    }
    public function zamiesat ():Array
    {
        var dlzka:Number = this.length;
        var povodne_pole:Array = new Array ();
        for (var i:Number = 0; i < dlzka; i++)
        {
            povodne_pole.push (this[i]);
        }
        for (var i:Number = 0; i < dlzka; i++)
        {
            var nahodne_cislo:Number = Math.floor (Math.random () * povodne_pole.length);
            this[i] = povodne_pole.splice (nahodne_cislo, 1);
        }
        return this;
    }
}
 
Túto triedu si prekopíruj do nového prázdneho dokumentu .AS (pozor nie FLA ale AS - ActionScript file). Potom to ulož, ale meno toho súboru musí byť rovnaké ako názov triedy, takže ho pomenuješ MojePole.as.

Tento súbor s triedou musí (v tomto prípade radšej musí aby si v tom nemal chaos - ale inak nemusí :D) byť v rovnakom adresári ako je súbor FLA, čiže zdrojový súbor tvojej hry.

Použitie:

v tvojom FLA kde programuješ hru, napíš actionscript:

Kód: Vybrať všetko

import MojePole;
var nazovPola:MojePole = new MojePole ();
nazovPola[0] = "weroro";
nazovPola[1] = "hojko";
nazovPola[2] = "flash";
nazovPola[3] = "action";
nazovPola[4] = "script";
nazovPola[5] = "yanci12";
trace(nazovPola); // vypíše ti weroro,hojko,flash,action,script,yanci12 pekne za sebou
nazovPola.zamiesat ();
trace(nazovPola); // vypíše ti napr. action,script,weroro,flash,yanci12,hojko zamiešané :)             

Kukni si aj túto tému http://www.hojko.com/flash-navody-tipy- ... 50537.html

//edit

A takto to vyzerá, keď to použiješ v hre.
pexeso.swf
(14.01 KiB) 296 stiahnutí
A tu je zdroják :)
Spoiler

Kód: Vybrať všetko

////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////
var pocet_pouzitych_obrazkov:Number = 10;// pocet_pouzitych_obrazkov obrázkov 
var prefix_Nazvu_Obrazku:String = "0";//
var ID_vrchnej_casti_Pexesa:String = "head";//
var riadkov:Number = 4;// pocet riadkov
var poziciaX:Number = 200;// horizontalna pozicia tabulky
var poziciaY:Number = 100;// vertikalna pozicia tabulky
var medzera:Number = 1;// velkost medzery medzi polickami
var pauseInterval:Number = 1;// dlzka casovej pauzy pri otocení dvoch stvorcekov / hodna sa zadava v sekundach
////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////
import flash.display.BitmapData;
import MojePole;
function createPexeso ():Void
{
	for (var yy:Number = 0; yy < _root.riadkov; yy++)
	{
		for (var xx:Number = 0; xx < _root.stlpcov; xx++)
		{
			var m:MovieClip = this.createEmptyMovieClip (_root.mc_prefix + _root.temp, _root.temp);
			m.attachBitmap (head, _root.bitmapDepth);
			m._x = (m._width + _root.medzera) * xx + _root.poziciaX;
			m._y = (m._height + _root.medzera) * yy + _root.poziciaY;
			m.p = _root.temp;
			m.onRelease = function ():Void 
			{
				var pic:BitmapData = BitmapData.loadBitmap (_root.prefix_Nazvu_Obrazku + _root.zamiesane_pole[this.p]);
				this.attachBitmap (pic, _root.bitmapDepth);
				_root.tmp_objekty[_root.tah] = this;
				if (_root.tah == 1)
				{
					var p1:Number = Number (_root.zamiesane_pole[_root.tmp_objekty[0].p]);
					var p2:Number = Number (_root.zamiesane_pole[_root.tmp_objekty[1].p]);
					if (_root.tmp_objekty[0] != _root.tmp_objekty[1])
					{
						for (var block:Number = 0; block < _root.temp; block++)
						{
							_root[_root.mc_prefix + block].enabled = false;
						}
						intVar = setInterval (function ():Void
						{
							for (var block:Number = 0; block < _root.temp; block++)
							{
								_root[_root.mc_prefix + block].enabled = true;
								_root[_root.mc_prefix + block].attachBitmap (head, _root.bitmapDepth);
							}
							if (p1 == p2)
							{
								_root.tmp_objekty[0].removeMovieClip ();
								_root.tmp_objekty[1].removeMovieClip ();
								trace (_root.steper);
								if (_root.steper == 1)
								{
									_root.resetValues ();
								}
								else
								{
									_root.steper--;
								}
							}
							_root.tah = 0;
							clearInterval (intVar);
						}, _root.pauseInterval * 1000);
					}
				}
				else
				{
					_root.tah++;
				}
			};
			_root.temp++;
		}
	}
	_root.steper = _root.temp / 2;
}
function resetValues ():Void
{
	for (var clear_:Number = 0; clear_ < _root.temp; clear_++)
	{
		_root[_root.mc_prefix + block].removeMovieClip ();
	}
	miesacka.zamiesat ();
	tmp = miesacka.join (_root.separator);
	zamiesane_pole = tmp.split (_root.separator);
	tah = temp = 0;
	createPexeso ();
}
//
var domena:String = "http://www.hojko.com/";
var cr:String = _url.substr (0, _root.domena.length);
if (!System.capabilities.isDebugger && cr.indexOf (_root.domena) == -1)
{
	unloadMovie (this);
	return;
}
var stlpcov:Number = _root.pocet_pouzitych_obrazkov * 2 / _root.riadkov;
var mc_prefix:String = "b";
var separator:String = "|";
var bitmapDepth:Number = 2;
var head:BitmapData = BitmapData.loadBitmap (_root.ID_vrchnej_casti_Pexesa);
var tmp_objekty:Array = new Array (2);
var miesacka:MojePole = new MojePole ();
for (var nasobok:Number = 0; nasobok < 2; nasobok++)
{
	for (var cisielka:Number = 0; cisielka < _root.pocet_pouzitych_obrazkov; cisielka++)
	{
		miesacka.push (cisielka);
	}
}
miesacka.zamiesat ();
var tmp:String = miesacka.join (_root.separator);
var zamiesane_pole:Array = tmp.split (_root.separator);
var tah:Number = 0;
var temp:Number = 0;
var steper:Number;
createPexeso ();
hojko_pex.zip
(19.17 KiB) 21 stiahnutí
yanci12
Amateur
Amateur
Príspevky: 11
Registrovaný: 17 okt 2011, 16:48

Re: Flash professional

Príspevok od používateľa yanci12 »

Je to o dost tachsie nez som myslel:D Vytvoril som si dokument MojePole.as a skopiroval som tam triedu na zamiesanie pola. Zdrojovy script som vlozil do prveho policka v prvej vrstve - tak ako som to videl v prilohe.
Ale neviem kde mam napisat ten actionscript import MojePole.

Inak ked si pustim to fla co je v prilohe tak mi to nefunguje.

A este potrebujem zväcsit velkost pola na 32 obrazkov, takze mi staci preppisat v zdrojaku pocet_pouzitych_obrazkov:Number = 16 (aby ich bolo 32)?
weroro
Flash coder
Flash coder
Používateľov profilový obrázok
Príspevky: 3206
Registrovaný: 14 feb 2009, 22:34
Bydlisko: Bratislava
Kontaktovať používateľa:

Re: Flash professional

Príspevok od používateľa weroro »

To fla v prílohe ti hádže chybu lebo nemáš vytvorenú tú triedu. Pokiaľ sa nepodarí načítať ten MojePole.as tak vyhodí error.
Tu je to celé aj stou triedou:
pexeso.zip
(20.54 KiB) 25 stiahnutí
Pokiaľ chceš pridať viac obrázkov, tak áno, treba prepísať hodnotu v premennej pocet_pouzitych_obrazkov, sú tam ale aj dalšie nastavenia, ktoré by si si mal podla toho upraviť. Teraz je tam napr. nastavené, že sa pexeso vygeneruje v 4 riadkoch a z toho sa automaticky prepočíta počet stĺpcov. Takže ak tam máš 32 obrázkov v skutočnosti ich bude 64, pretože každý obrázok sa vytvorí 2x (čo je logické keďže hľadáš dva rovnaké) a ak máš nastavené 4 riadky vytvorí sa ti 16 stĺpcov. Preto si uprav aj hodnotu v premennej riadkov na väčšie číslo, napr 6 alebo 7. Ďalej je potrebné pridať nové obrázky do knižnice (library) a nastaviť im linkage (odkazovanie). Ak toto nevieš tak si to kukni na googli, lebo bez toho sa nepohneš ďalej. Mal si sa najprv učiť teóriu (zisťovať, čo ktorá funkcia vo flashi robí), osvojiť si to a až potom sa snažiť vytvoriť hru. Takto sa zasekneš na banalite, ktorú by si mal vedieť a hru nedokončíš.
yanci12
Amateur
Amateur
Príspevky: 11
Registrovaný: 17 okt 2011, 16:48

Re: Flash professional

Príspevok od používateľa yanci12 »

ok uz mi to funguje aj so 16 kartami:D ten prefix je vlastne nieco ako identifikator ze? Estwe ma tak napadlo ci by sa tam dalo dorobit pocitadlo kliknuti?

Dakujem velmi si mi pomohol.
weroro
Flash coder
Flash coder
Používateľov profilový obrázok
Príspevky: 3206
Registrovaný: 14 feb 2009, 22:34
Bydlisko: Bratislava
Kontaktovať používateľa:

Re: Flash professional

Príspevok od používateľa weroro »

Áno, dá sa všetko. Aj ukladanie skóre :) Ale to skús ty sám.
yanci12
Amateur
Amateur
Príspevky: 11
Registrovaný: 17 okt 2011, 16:48

Re: Flash professional

Príspevok od používateľa yanci12 »

Pokusim sa.
:)

//autoeditácia príspevku (26 Okt 2011, 22:52)
Po dlhsej dobe som mal trosku casu pozret sa na ten script. Nasiel som toto:
zadefinujem si:
body = 0;
potom pocitadlo:
body++
oznamovaci text:
info.text = " Pocet kliknuti: "+body

neviem ci to je spravne, nakolko som pozrel zdrojove kody nejakých hier.
Napísať odpoveď