Pagina 11 din 18

Scris: 04 Apr 2012, 01:09
de Manu
Ca sa fi sigur ca nu trece sub 0, iti dau doua solutii:

1. Daca valoarea initiala este divizibila cu 10. In acel if la apasarea tastei a sa spui ca o alta conditie sine qua non ar fi sa fie mai mare de 0:
if(key_pressed(KEY_A)&&energy>0) energy=energy-10;
Adica, daca se apasa tasta A si valoarea variabilei energy este mai mare de 0, doar atunci din aceasta sa fie scazut 10.
Aceasta solutie nu e chiar atat de buna daca valoarea initiala a lui energy nu era divizibila cu 10.
Sa zicem ca energy era egal la inceput cu 35.
Apasand de trei ori pe tasta A, vom ajunge la valoarea 5, deci inca este respectata conditia energy mai mare de 0, iar la urmatoarea apasare a tastei A, se va ajunge la valoarea minus 5, valoare sub care nu se mai merge.

2. Cea mai buna solutie este ca dupa if-ul pentru apasarea tastei A sa se puna if-ul urmator:
if(energy<0) energy=0;

Asadar:
If(key_pressed(KEY_A))
{
energy=energy-10;
if(energy<0) energy=0;
}

se verifica astfel ca oricand energy este mai mic de 0 sa fie readus la valoarea 0, se asigura imposibilitatea scaderii sub 0.

In loc sa scrii:
energy=energy-10;
poti folosi si un sinonim:
energy-=10;

Scris: 28 Apr 2012, 15:09
de Stefan_Ilioaica
salut.
as fi interesat de doua lucruri:
1. Cum pot face sa apara niste butoane cu anumite optiuni?
De exemplu: exit button, cancel button.
2. Meniul verbalizat de catre jaws se poate creea scriind de exemplu: add_screen_reader_item?
multumesc

Scris: 28 Apr 2012, 15:19
de Manu
In ce fel sa faci butoanele?
Sa spuna Exit buton unde?
Nu prea e clar cum vrei, avand in vedere ca BGT nu are inca interfata grafica, probabil ca vrei sa fie simulate audio butoanele...
In legatura cu meniul... mi se pare ca in versiune aactualizata a clasei dynamic_menu exista posibilitatea adaugarii verbalizarii rpin screen reader. Eu la jocurile mele am schimbat ceva manual in clasa dynamic_menu pentru ca deja cea personalizata de mine era tare modificata sa mai am rabdare sa o iau pe cea de la ei.

Scris: 28 Apr 2012, 15:25
de Stefan_Ilioaica
paisa am mai multe optiuni, printre care sa ma plimb cu tab.
tin minte ca am vazut un meniu cu butoane verbalizate de sapy printre care navigam cu tasta tab.

Scris: 28 Apr 2012, 18:17
de Manu
Nu se prea intelege exact ce vrei, trebuie sa fii putin mai explicit.
Asadar ai vrea sa faci butoane adevarate sau pseudo-butoane, adica vizibile si auzibile sau doar auzibile.

Scris: 28 Apr 2012, 21:05
de Stefan_Ilioaica
as vrea audio daca vizual nu se poate.

Scris: 11 Iun 2012, 11:36
de Alexandru
Stefan Lilioaica a scris:
salut.
as fi interesat de doua lucruri:
1. Cum pot face sa apara niste butoane cu anumite optiuni?
De exemplu: exit button, cancel button.
2. Meniul verbalizat de catre jaws se poate creea scriind de exemplu: add_screen_reader_item?
multumesc

Salut!
Articolele in meniu se adauga tot cu TTS, doar ca trebuie sa pui functia install_keyhook(); care iti da posibilitatea de a folosi aplicatia respectiva cu Jaws pornit sau ceea ce vrei sa faci cu BGT, iar pentru a vorbi screen_reader-ul propriu-zis, iti trebuie functia set_speech_mode care ca parametru necesita ceea ce vrei sa utilizezi. 0 poate fi cand utilizezi Sapy, sau poate corespunde la unul dintre cele 4 cititoare de ecran suportate momentan de BGT.
De exemplu, ca sa utilizezi JAWS, poti pune set_speech_mode(JAWS);

Cat despre butoane, am creeat o mica aplicatie, in care sa ai un camp unde sa scri text, butonul OK care daca este apasat sa iti spuna Jaws-ul textul scris si Exit care va inchide aplicatia.
Mai jos, pun codul comentat.

Cod:
// Includem un fisier numit form care vine odata cu BGT si are clasa special pentru formulare
#include "form.bgt"
// Declaram un obiect
audio_form form;

// De aici incepe propriu-zis scriptul

void main()
{
// Scriem functia install_keyhook care ne va permite de a folosi aplicatia cu Jaws-ul pornit, dupa care vom scrie functia pentru ca Jaws sa citeasca butoanele, etc
install_keyhook();
form.set_speech_mode(JAWS);
// Creem o fereastra
form.create_window("Example Form", true);
// Creem un camp pentru text, dupa care vom creea butoanele
int test=form.create_input_box("Test", "", "", 0, false, false);
int ok=form.create_button("OK");
int cancel=form.create_button("Iesire");
// Punem un While care va tine fereastra deschisa dupa care vom scrie functia monitor care ne monitorizeaza activitatiile pe tastatura
while(true)
{
form.monitor();
wait(5);
// punem niste instructiuni conditionate, adica if-urile, care-i spun motorului BGT ce sa faca cand OK este apasat si ce sa faca cand butonul Iesire este apasat
if(form.is_pressed(ok))
{
screen_reader_speak_interrupt(JAWS, form.get_text(test));
}
if(form.is_pressed(cancel))
{
screen_reader_speak_interrupt(JAWS, "Iti multumesc pentru ca ai testat mica mea aplicatie. La revedere!");
uninstall_keyhook();
exit();
}
// Acum, punem un if care-i spune motorului BGT ca daca Alt+F4 este apasat, sa dezinstaleze key_hook-ul si sa inchida programul
if((key_down(KEY_LMENU))&&(key_pressed(KEY_F4)))
{
uninstall_keyhook();
exit();
}
}
}

Nu am mai facut verificari de genulin cazul in care Jaws nu este pornit utilizeaza sapy-ul, etc.

Scris: 20 Iul 2012, 22:10
de Stefan_Ilioaica
Salut.
Se poate face cumva ca un string sa returneze ceva random?
de exemplu, vreau sa fac un alert unde sa imi dea o tara random sa zicem dintre Spania, Portugalia si grecia, iar in functie de asta sa se intample ceva, sa apara un mesaj, sa cante o melodioara etc.
Ma poate ajuta cineva cu vreun sfat sau exemplu?
multumesc

Scris: 20 Iul 2012, 22:44
de Andreea Neagu
Poti sa folosesti un vector (array unidimensional) de tip string ca sa retii tarile, si sa generezi aleator un unsigned int intre 0 si numarul de tari-1, care sa fie indice pentru vector.
Da zicem ca tari[0] e Spania, tari[1] e Anglia si tari[2] e Romania. Vei genera un intreg fara semn, sa-i spunem i, intre 0 si 2, apoi faci ce vrei cu tari
Practic, reduci problema la lucrul cu numere.

Scris: 20 Iul 2012, 22:48
de Stefan_Ilioaica
S-ar putea si un mic exemplu? Asa ca sa imi fac eu o idee cat de cat cum ar trebui sa arate, sa nu ma mai tot incurc.

Scris: 21 Iul 2012, 03:10
de Manu

Cod: Selectaţi tot

string[] tari=["Spania", "Portugalia", "Grecia"];
int aleatoriu=random(0, tari.length());
alert("Titlu", "Ai nimerit "+tari[aleatoriu]+".");
Intr-un mod ineficient ai putea in continuare ca incepator sa consideri ca stii sigur la ce pozitie e o anume tara si sa iei decizii absolute in functie de valoarea variabilei aleatoriu:

Cod: Selectaţi tot

sound imn;

if(aleatoriu==0)
{
imn.stream("Imnul_Spaniei.ogg");
}
else if(aleatoriu==1)
{
imn.stream("Imnul_Portugaliei.ogg");
}
else if(aleatoriu==2)
{
imn.stream("Imnul_Greciei.ogg");
}
imn.play()
Codul de mai sus nu ar fi eficient, ar fi greu de intretinut si ar fi functional pentru doar cateva tari, poate chiar mai multe daca vrei sa lucrezi din greu apoi.
Daca incerci sa iei codul de mai sus si nu ai un while principal, ci doar vrei sa-l vezi asa intr-un simplu void main() cu exit() la sfarsit, sa nu uiti sa pui imn.play_wait() in loc de imn.play(), altfel nu vei auzi nimic dupa apasarea Ok-ului.

Versiune noua de BGT, revizia 6

Scris: 21 Iul 2012, 17:37
de Manu
In curand apare o noua versiune de BGT, 1.1 revizia 6.

Principala noutate va fi posibilitatea de a apela functii din fisiere .DLL.
Astfel se pare ca vom putea crea si interfata grafica la unele jocuri, eu am in vedere in primul rand tablele, la versiunea 1.5 a acestora lucrez deja.

O alta noutate importanta este suportul pentru Joystick.

Continutul fisierului Change Log partial este:
* Modified the internal encryption key scheme to be considerably more secure.
IMPORTANT! The encryption functions are not backwards compatible. You will not be able to decrypt any data encrypted with earlier revisions of BGT, using this version. These measures were taken to make it harder for hackers to steal keys from memory dumps.
* Updated the script interpreter to the latest version which fixes some more bugs found by users, and adds the following features:
1. A method called reserve to the array object which is useful for optimizing performance because it preallocates memory for future elements.
2. A method called is_empty to the string, the array and the dictionary objects which sometimes is a more efficient shortcut than checking the length.
3. A method called get_size to the string, the array and the dictionary objects. In the two former cases, get_size is the same as the length method.
* Added some new functions to perform script code profiling.
* Added an instance object that allows you to ensure that only one copy of your game is running (thanks Damien).
* Added a method called get_headers to the http object that retrieves only the headers from a given location on an http server (thanks Nikola).
* Added two functions (set_sound_master_volume and get_sound_master_volume) to adjust the volume of the entire sound output in a given game.
* Added an optional parameter to the input_box function to fill the box with some initial text (thanks Claudio).
* Added a global script property called SCRIPT_EXECUTABLE which retrieves the full path to the program (sponsored by Lukáš Hosnedl).
* The set_sound_decryption_key method now opens the default audio device implicitly if a device isn't already open.
* Reduced the size of precompiled game executables a little more.
* The maximum stack size has been increased from 2000 to 10000 functions.
* Added support for progress bars with beeps to the audio_form include class (thanks Christopher).
* Added support for multiselection enabled listboxes in the audio_form include class (Thanks Damien).
* Added several new methods and constants for retrieving, setting and managing control information in the audio_form include class (Thanks Damien).
* Added default values for some parameters in the control creation methods in the audio_form include class (Thanks Damien).
* Added an optional parameter to the create_window method in the audio_form class that specifies whether the speech source should say the word "dialog" or simply state the window title.
* added a check to the audio_form class where the set_tts_object will revert back to the form's own voice object if set to null (Thanks Damien).
* Changed a behaviour in the audio_form so that now only one progress bar in the form may be flagged as global (Thanks Damien).
disabled interception of keys in read only boxes in the audio_form class (Thanks Damien).
* changed the behaviour in the audio_form class so that having no window title in the form causes it not to try and speak it (Thanks Damien).
* Added support for the right control key to be used for navigation in the audio_form class (Thanks Damien).
* Changed the name of the redist/screen-readers directory to redist/screen_readers, as it was originally supposed to be.
* Fixed a crash in the load_from_memory method of the sound object if invalid input is given (thanks Nikola).
* Fixed a bug that would cause sound cloning to be performed incorrectly if a file with the same name was loaded both from a pack file and from disk.
* Fixed a bug in the write method of the logger class where a file would still be written to even if the log was empty (Thanks Damien).
* Fixed a bug in the logger class that caused line breaks not to be written correctly (Thanks Damien).
* Fixed a bug in the audio_form include class where speech did not speak the highlighted item of a listbox when focused (Thanks Damien).
* Fixed a bug in the audio_form include class where the cursor of a listbox would reset if adding an item to a list (Thanks Damien).
* Fixed a bug in the audio_form class where controls created after changing the speech output would not reflect this change (Thanks Damien).
* fixed a bug in the audio_form class whereby the set_tts_object method would fail if the form was active (Thanks Damie).
* fixed a bug in the audio_form class that caused no speech when pressing home on an input box with keyboard echo turned off (Thanks Damien).
* Fixed a bug in the audio_form class that allowed control index parameters below 0 to pass as valid, causing runtime errors (Thanks Damien).
* Fixed a bug in the audio_form class that pasted multiline text into a single line field (Thanks Damien).
* Notice: Failed to document the additional parameters in the create_button method in the audio_form include class (thanks Damien).
* Fixed a few typos in the language tutorial (thanks Marc and Michael).

Scris: 23 Iul 2012, 21:29
de Stefan_Ilioaica
salut.
M-am lovit de o problema foarte ciudata.
am facut un meniu, iar in afara de asta am mai facut o functie numita optiune_indisponibila, care sa fie apelata atunci cand este selectat un item din meniu.
sa zicem ca am facut functia aceea optiune_indisponibila, in care facem asa:
screen_reader_speak(JAWS, "X,Y,Z");
iar la if-urile pentru meniu am facut in felul urmator:
if(menu_result==1)
{
optiune_indisponibila();
meniu();
}
Ce vreau eu sa spun, este ca atunci cand dau enter pe item-ul din meniu, imi revine direct inapoi la meniu, fara a se activa functia optiune_indisponibila.
Intrebarea mea este: De ce se intampla acest lucru si ce ar trebui facut pentru a fi corectat?
multumesc

Scris: 24 Iul 2012, 02:17
de Manu
Functia optiune_indisponibila() nu face decat sa transmita JAWS-ului un mesaj pentru verbalizare.
Se pare ca la randul ei, clasa dynamic_menu are implementata vorbirea printr-o voce cu interrupt, adica intrerupe tot ce se vorbea anterior.
Scriptul tau nu mai apuca sa spuna mesajul din optiune_indisponibila() pentru ca instant ajunge iar la meniu care anunta ceva intrerupand tot ce ai fi vrut sa se auda la acel moment.
Ca sa verifici in forma actuala, pune in acel if, intre optiune_indisponibila() si meniu() un wait(3000), o asteptare de 3 secunde sa zicem, astfel incat sa apuce sa anunte JAWS "x,y,z".

BGT 1.2

Scris: 27 Iul 2012, 13:59
de Manu
Marti a aparut si BGT versiunea 1.2.
Despre noutati am vorbit putin mai sus, important e ca exista suport pentru joystick, ceea ce inseamna ca in viitor vor aparea mai mult ejocuri care se vor putea utiliza cu astfel de game controllers..

Din pacate, se mai amana putin suportul pentru DLL-uri...