Skip to content

Commit

Permalink
Parametriza tamaño del buffer para reproducir sonidos
Browse files Browse the repository at this point in the history
  • Loading branch information
titos-carrasco committed Jun 24, 2022
1 parent 8793e38 commit 379cb8c
Show file tree
Hide file tree
Showing 4 changed files with 99 additions and 14 deletions.
10 changes: 7 additions & 3 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,10 +1,14 @@
# Changelog

## v0.7.2 2022-06-23
- Agrega método LittleGameEngine.contains() pata detectar los GameObjects que contienen a un punto dado en un layer
- Completa documentación en Canvas.py
- Parametriza tamaño del buffer para reproducir sonidos (SoundManager)

## v0.7.1 2022-06-13
- Corrige tamaño del buffer al reproducir sonidos y agrega un drain() para lso sonidos cortos
- Corrige tamaño del buffer al reproducir sonidos y agrega un drain() para los sonidos cortos
- Corrige manejo del caracter separador de archivos


## v0.7.0 2022-06-12
- El directorio de recursos es recibido desde la línea de comandos
- Se elimina control de volumen
Expand Down Expand Up @@ -39,7 +43,7 @@

## v0.5.7.1 2022-05-27
- Canvas.java: corrige coordenadas en método drawText
- Se corrigeb los demos acorde a lo anterior
- Se corrige los demos acorde a lo anterior

## 2022-05-26
- Canvas.Java: corrige error de nombre de método drawPoint()
Expand Down
50 changes: 41 additions & 9 deletions src/rcr/lge/Canvas.java
Original file line number Diff line number Diff line change
Expand Up @@ -18,22 +18,22 @@ public class Canvas extends GameObject {
/**
* Crea un canvas, para dibujar, en la posicion y dimensiones dadas
*
* @param origin posicion (x, y) del canvas
* @param size dimension (width, height) del canvas
* @param position posicion (x, y) del canvas
* @param size dimension (width, height) del canvas
*/
public Canvas(PointD origin, Size size) {
this(origin, size, null);
public Canvas(PointD position, Size size) {
this(position, size, null);
}

/**
* Crea un canvas, para dibujar, en la posicion y dimensiones dadas
*
* @param origin posicion (x, y) del canvas
* @param size dimension (width, height) del canvas
* @param name nombre para esta GameObject
* @param position posicion (x, y) del canvas
* @param size dimension (width, height) del canvas
* @param name nombre para esta GameObject
*/
public Canvas(PointD origin, Size size, String name) {
super(origin, size, name);
public Canvas(PointD position, Size size, String name) {
super(position, size, name);
surface = ImageManager.createTranslucentImage(size.width, size.height);
}

Expand Down Expand Up @@ -157,18 +157,50 @@ public void drawSurface(PointD position, BufferedImage surface) {
g2d.dispose();
}

/**
* Traza una imagen, previamente cargada, en este canvas en la posicion dada
*
* @param position Coordenadas (x, y) en donde se trazara la imagen dentro del
* canvas
* @param name Nombre de la secuencia de imagenes a utilizar
*/
public void DrawImage(PointD position, String name) {
DrawImage((int) position.x, (int) position.y, name, 0);
}

/**
* Traza una imagen, previamente cargada, en este canvas en la posicion dada
*
* @param position Coordenadas (x, y) en donde se trazara la imagen dentro del
* canvas
* @param name Nombre de la secuencia de imagenes a utilizar
* @param idx indice dentro de la secuencia de imagenes para especificar
* que imagen utilizar
*/
public void DrawImage(PointD position, String name, int idx) {
DrawImage((int) position.x, (int) position.y, name, idx);
}

/**
* Traza una imagen, previamente cargada, en este canvas en la posicion dada
*
* @param x Coordenada X en donde se trazara la imagen dentro del canvas
* @param y Coordenada Y en donde se trazara la imagen dentro del canvas
* @param name Nombre de la secuencia de imagenes a utilizar
*/
public void DrawImage(int x, int y, String name) {
DrawImage(x, y, name, 0);
}

/**
* Traza una imagen, previamente carga77da, en este canvas en la posicion dada
*
* @param x Coordenada X en donde se trazara la imagen dentro del canvas
* @param y Coordenada Y en donde se trazara la imagen dentro del canvas
* @param name Nombre de la secuencia de imagenes a utilizar
* @param idx Indice dentro de la secuencia de imagenes para especificar que
* imagen utilizar
*/
public void DrawImage(int x, int y, String name, int idx) {
LittleGameEngine lge = LittleGameEngine.getInstance();
BufferedImage surface = lge.imageManager.getImages(name)[idx];
Expand Down
31 changes: 31 additions & 0 deletions src/rcr/lge/LittleGameEngine.java
Original file line number Diff line number Diff line change
Expand Up @@ -494,6 +494,37 @@ public GameObject[] collidesWith(GameObject gobj) {
return gobjs.toArray(new GameObject[gobjs.size()]);
}

/**
* Obtiene todos los GameObjects de una capa dada que contienen un punto
* especificado
*
* @param layer La capa a revisar
* @param x Coordenada X del punto a revisar
* @param y Coordenada Y del punto a revisar
* @return Los GameObjects que contienen al punto
*/
public GameObject[] contains(int layer, double x, double y) {
return contains(layer, new PointD(x, y));
}

/**
* Obtiene todos los GameObjects de una capa dada que contienen un punto
* especificado
*
* @param layer La capa a revisar
* @param position El punto a revisar
* @return Los GameObjects que contienen al punto
*/
public GameObject[] contains(int layer, PointD position) {
ArrayList<GameObject> gobjs = new ArrayList<GameObject>();

for (GameObject o : gLayers.get(layer))
if (o.rect.contains(position))
gobjs.add(o);

return gobjs.toArray(new GameObject[gobjs.size()]);
}

// ------ camera ------
/**
* Retorna la posiciona de la camara
Expand Down
22 changes: 20 additions & 2 deletions src/rcr/lge/SoundManager.java
Original file line number Diff line number Diff line change
Expand Up @@ -73,6 +73,18 @@ public void loadSound(String name, String fname) {
* @return el ID del player del sonido a reproducir
*/
public Object playSound(String name, boolean loop) {
return playSound(name, loop, 0);
}

/**
* Inicia la reproduccion de un sonido
*
* @param name el sonido (previamente cargado) a reproducir
* @param loop Verdadero para repetir el sonido de manera constante
* @param buffSize Tamano del buffer asociado a la linea
* @return el ID del player del sonido a reproducir
*/
public Object playSound(String name, boolean loop, int buffSize) {
ClipData clipData = sounds.get(name);

if (clipData == null)
Expand All @@ -85,12 +97,18 @@ public void run() {
}
LittleGameEngine lge = LittleGameEngine.getInstance();
AudioFormat format = clipData.format;
int _buffSize = buffSize;
if (buffSize <= 0) {
_buffSize = format.getFrameSize() * format.getChannels() * (int) format.getFrameRate();
if (!System.getProperty("os.name").startsWith("Windows"))
_buffSize /= 200;
}

DataLine.Info info = new DataLine.Info(SourceDataLine.class, format);
SourceDataLine line = null;
try {
line = (SourceDataLine) AudioSystem.getLine(info);
line.open(format, format.getFrameSize() * (int) format.getFrameRate());
line.open(format, _buffSize);
} catch (LineUnavailableException e) {
e.printStackTrace();
return;
Expand All @@ -102,7 +120,7 @@ public void run() {
while (lge.running) {
int pos = 0;
while (lge.running && pos < total) {
int n = format.getFrameSize() * (int) format.getFrameRate();
int n = _buffSize;
if (n > total - pos)
n = total - pos;
int nb = line.write(clipData.data, pos, n);
Expand Down

0 comments on commit 379cb8c

Please sign in to comment.