Pagina 18 din 18
Scris: 21 Ian 2017, 15:04
de Stefan_Ilioaica
S-a rezolvat, am pus un -1 in acolo la length
void laser_sound()
{
int r=random(0, laser.length()-1);
laser[r].play();
}
Nu ma prind inca ce face -1, dar e clar c-am scapat definitiv de eroarea aia. Daca il scot de acolo, iar da rate-uri
Scris: 22 Ian 2017, 00:22
de Manu
Dacă sunetele se numesc cu ...0.ogg, ...1.ogg şi ...2.ogg, este o problemă la acel:
int r = random(0, steps.length());
Asta înseamnă că randomul este între 0 şi 3, pentru steps.length() este egal cu 3.
Out of bound apare când randomul dă 3.
Trebuie în felul următor:
int r = random(0, steps.length()-1);
Scris: 22 Ian 2017, 00:29
de Manu
Acum am văzut că ai corectat tu problema...
Scris: 22 Ian 2017, 10:50
de IonPop
Manu a explicat deja motivul acelei erori, insa o sa completez si eu in caz ca nu a fost destul de clar.
Acolo ai un array numit laser care are 3 elemente, asa cum l-ai definit, adica laser[0], laser[1] si laser[2].
Metoda laser.length() va returna numarul de elemente ale array-ului, adica 3.
Daca folosesti doar laser.length() si nu laser.length() - 1, la un moment dat programul va incerca sa acceseze elementul laser[3], care nu exista, si iti va da acea eroare.
Sigur stiai, dar ti-a scapat ca intr-un array elementele sunt numerotate incepand cu 0, nu cu 1, asa ca intr-un array cu 3 elemente, ultimul element are indexul 2, nu 3.
Scris: 24 Ian 2017, 22:28
de Stefan_Ilioaica
Salutare,
revin aici cu o alta problema.
Ma tot intrebam eu cum sa plasez obiecte semnalate sonor pe o harta sau pe un drum, si am descoperit chestia asta cu sound_positioning, care mie unul mi se pare destul de tare.
Ei, acu-i baiul. As avea o intrebare.
Daca vreau, sa zicem ca item-ul respectiv sa ocupe mai mult de o patratica, cum as putea proceda folosind aceasta metoda?
Ca sa exemplific, sa spunem ca in dreapta este o apa curgatoare. Sunetul incepe sa se centreze pe masura ce ma apropii de el. As vrea ca la intrarea in rau, sunetul sa imi ramana pe centru, timp de.... sa zicem 10 patratele, dupa care sa se realizare iesirea din rau si indepartarea de acesta, adica pan-ul si volumul sa se schimbe, asa cum se intampla in mod normal.
pun mai jos coduletul cu sabia, pentru a vedea ce si cum.
Nu voi pune tot codul, pun doar partile esentiale.
Cod:
void level1()
{
int default_weapon_item=1;
int default_weapon=0;
string sword="inactive";
x=0;
y=0;
int s_position=10;
drum.resize(50);
sound ambience;
sound step;
sound wall;
sound swordsound;
sound sabie;
ambience.stream("Sounds/Suburban Neighborhood.ogg");
ambience.volume=-5;
ambience.play_looped();
swordsound.load("Sounds/sword.ogg");
swordsound.volume=0;
wall.load("sounds/wall.ogg");
step.load("Sounds/Concrete1.wav");
step.volume=-5;
sabie.load("sounds/sword.wav");
sabie.play_looped();
for(int x=0; x<50; x++)
{
drum[x];
}
drum[2]="Casa";
drum[4]="Casa";
drum[7]="Casa";
drum[15]="Scut";
while(true)
{
wait(5);
if(key_down(KEY_LEFT)&&T.elapsed>250)
{
if(x>0)
{
T.restart();
walk_left();
position_sound_1d(sabie, x, s_position, 1, 1);
step.stop();
step.play();
spune(""+drum[x]+"");
}
}
if(key_down(KEY_RIGHT)&&T.elapsed>250)
{
if(x<51)
{
T.restart();
walk_right();
position_sound_1d(sabie, x, s_position, 1, 1);
step.stop();
step.play();
spune(""+drum[x]+"");
}
}
Bineinteles ca coduletul mai continua el cu alte if-uri si chestiute, dar asta este partea relevanta legata de sound positioning.
Scris: 05 Iun 2017, 12:34
de Stefan_Ilioaica
Salutare tuturor!
Imi poate explica cineva aici cum anume functioneaza sound_pool-ul din BGT? L-a folosit cineva?
Am tot citit pe acolo prin help dar parca ceva imi tot scapa...
Un codulet cu explicatii langa mi-ar fi de foarte mare folos.
Scris: 11 Iun 2017, 17:48
de Manu
Eu nu l-am folosit, dar sigur poţi încărca sunete, iar apoi le poti actualiza pe toate simultan ca volum, pan etc, astfel încât să faci un joc în care tu eşti personajul aflat la centru, iar senzaţia de deplasare este dată de mişcarea celorlalte sunete pe lângă tine.
Scris: 20 Iul 2017, 19:52
de Vlad_Ciotescu
salutare
soundpoolul este practic un fel de buffer care accepta sa fie mai multe sunete redate in acelas timp, si chiar acelas sunet poate fi redat de mai multe ori fara a interfera cu alt sunet. practic, la sound simplu pentru replay el se opreste singur cand eu apas o tasta ca sa se redea din nou pe cand la soundpool ele nu interfereaza de loc. ba chiar se aud in ca un fel de ecou. dar acuma am auzit ca cineva lucreaza la o clasa in bgt dintr-un dll pentru a adauga sunete in mod 3d.
Scris: 04 Apr 2018, 21:30
de Stefan_Ilioaica
Salutare.
Revin aici tot cu o chestier legata de Sound Pool, la un moment dat ma pierd pe drum si nu inteleg codul. Am incercat eu sa fac ceva, in combinatie cu ceea ce am gasit in helper layer, ca m-am gandit ca poate inteleg. Dar tot nu realizez tot ce se intampla in codul ala, iar daca cineva ar putea sa imi explice codul, asa cum se mai facea pe la cursul de BGT as fi tare recunoscator.
Daca am mai multe sunete de pasi, tre sa le setez la fiecare chestia aia cu max distance si sa fac la fiecare in parte for-ul Acela pe care il veti vedea in exemplul de mai jos?
De asemenea, exista vreo metoda mai simpla decat ceea ce se vede mai jos?
Multumesc anticipat
De aici incepe codul
sound_pool step1;
const string sound_extension=".wav";
void main()
{
step1.max_distance=70;
for(int counter=1; counter<15; counter++)
{
step1.play_1d("Sounds/sound"+counter+sound_extension, 0, random(0, 20), true);
}
aici vine un while in care se mai intampla una alta, printer care se Numara si zona unde iar avem treaba cu sound pool-ul....
if(key_pressed(KEY_LEFT))
{
x--;
sound_environment.play_stationary("sounds/steps/"+step+sound_extension, false);
sound_environment.update_listener_1d(x);
}
if(key_pressed(KEY_RIGHT))
{
x++;
sound_environment.play_stationary("sounds/steps/"+step+sound_extension, false);
sound_environment.update_listener_1d(x)
}
Scris: 06 Apr 2018, 11:41
de Manu
Nu am folosit niciodată acea clasă pentru că era din Helper Layer. Pare a fi utilă pentru că poate ţine multe sunete şi le poate controla pe toate simultan, dar... din păcate nu mă pot exprima dacă nu am utilizat-o şi nu sunt familiarizat.
Scris: 06 Apr 2018, 16:08
de Stefan_Ilioaica
Atunci, ce metoda ai folosi ca un anume obiect sa se auda in functie de pozitia jucatorului intr-un side scroller sau o plansa 2D? In functie de pozitia jucatorului, celelalte obiecte de pe table sa isi ajusteze pan-ul. Eu am incercat mai multe metode, n-am gasit ceva care sa ma multumeasca pe deplin asa c-am decis sa intreb aici. De asemenea, as fi curios de o metoda prin care sa nu mi se mai tot intrerupa celelalte sunete cand intervine unul nou. Daca pasesc si pe fundal intervine un atac de exemplu, sunetul de pasi mi se opreste in timp ce cel de atac este redat.
Scris: 10 Apr 2018, 17:39
de Vlad_Ciotescu
salutare.
stefan, referitor la mesajul in care ai postat acel cod am de mentionat faptul ca spre deosebire de sound caruia trebuie sa-i instantiem un obiect fiecarui sunet, la sound pool poti folosi play_2d sau play_stationary sau oricare dintre functiile de play mai multor sunete care se redau in acelasi timp fara a se-ntrerupe.
acum sa trecem la urmatoarea ta intrebare referitoare la cum sa faci ca acele sunete sa-si modifice pozitia in functie de ascultator. este foarte simplu. play_1d(nume fisier sunet, pozitie_ascultator, pozitie_sunet sursa). si te joci cu cele doua pozitii prin incrementarea sau decrementarea acestora. nu mai tin minte exact parametrii functiei de mai sus pentru ca nu am mai lucrat in bgt de ceva timp, dar in principiul acesta este mecanismul.