Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   cargar sonido con delphi 7 (https://www.clubdelphi.com/foros/showthread.php?t=65338)

subrul 06-12-2009 19:53:12

cargar sonido con delphi 7
 
Hola,

a ver si alguien me puede echar una mano.

Soy un estudiante que esta haciendo un juego tipo arkanoid en delphi 7 pero tengo algunas dificultades ya que nunca habia usado este programa ni sabia nada de la programacion en pascal.


En resumen, querria que alguien me ayudara diciendome con que comandos (en delphi 7) puedo cargar un sonido (lo quiero por ejemplo que suena un bip cada vez que la pelota rebota en una pared). He cargado texturas pero no se como hacerlo con sonidos. Se puede cargar un video? en que formatos? y un gif? que comando tengo que poner en el "uses" en caso de poder usar gif (por ejemplo, si cargo texturas jpeg tengo que poner "jpeg" en el "uses").

Otra cosa. Tengo 3 esferas con sus respectivos comportamientos behaviours, y cada vez que una de ellas esta mas abajo de -13 en el eje Y, se destruyen. Lo que quiero es que logicamente cuando la ultima de ellas pase de -13 el juego se acabe. Habia pensado en hacer una variable que cuente, cada vez que una de ellas baje de -13 que el contador se ponga a 1, y cuando el contador llegue a 3 que se acabe el juego, pero no se como hacer lo del contador.


A ver si alguien me puede ayudar. Me gustaria que me dijerais que comandos tengo que poner en el "uses" en caso de necesitarlo, de que clase son las variables que usare (integer, strings, etc...), en que procedures tengo que poner las cosas, etc, ya que soy novato y no tengo idea.


Muchas gracias.


PD: He decidido poner un post porque llevo una semana mirando muchos tutoriales y la mayoria estan orientados a hacer procesadores de texto, aun asi he aprendido "mucho" ya que partia de 0.

copiare mi UNIT1 del programa por si alguien le interesa, a modo de curiosidad (logicamente partiendo de 0 no he podido hacer solo lo que muestro a continuacion, sino con ayuda):







unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, GLWin32Viewer, GLMisc, GLScene, GLObjects, GLODEManager,
GLCadencer, jpeg, VectorGeometry, Keyboard, ExtCtrls, dynode, Menus;

type
TForm1 = class(TForm)
GLScene1: TGLScene;
visor: TGLSceneViewer;
camara1: TGLCamera;
luz: TGLLightSource;
paredtrasera: TGLCube;
bloqueestatico1: TGLCube;
helice3: TGLCube;
helice1: TGLCube;
helice2: TGLCube;
bloqueestatico2: TGLCube;
gestorODE: TGLODEManager;
GLRenderPoint1: TGLRenderPoint;
GLCadencer1: TGLCadencer;
GLDummyCube1: TGLDummyCube;
pelota: TGLSphere;
bloque1: TGLCube;
soporte: TGLCube;
bloque3: TGLCube;
listaUniones: TGLODEJointList;
ladoderecho: TGLSphere;
ladoizquierdo: TGLSphere;
Timer1: TTimer;
paredizquierda: TGLCube;
paredderecha: TGLCube;
techo: TGLCube;
suelo: TGLCube;
pelota2: TGLSphere;
pelota3: TGLSphere;
procedure GLCadencer1Progress(Sender: TObject; const deltaTime,
newTime: Double);
procedure Timer1Timer(Sender: TObject);
procedure gestorODECollision(Sender, Object1, Object2: TObject;
var Contact: TdContact; var HandleCollision: Boolean);

private

colisionAnterior, colisionActual : boolean;
colisionespelota: Integer;

public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.GLCadencer1Progress(Sender: TObject; const deltaTime,
newTime: Double);
var
dinsoporte: TGLODEDynamic;

begin

dinsoporte := soporte.Behaviours[0] as TGLODEDynamic;

if IsKeyDown(VK_LEFT) then
dinsoporte.AddForce(AffineVectorMake(0, 0, -50));

if IsKeyDown(VK_RIGHT) then
dinsoporte.AddForce(AffineVectorMake(0, 0, 50));

colisionAnterior := colisionActual;
colisionActual := false;

if pelota.Position.Y < -13 then
begin

end;


gestorODE.Step(deltaTime)
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
Timer1.Enabled := false;
end;

procedure TForm1.gestorODECollision(Sender, Object1, Object2: TObject;
var Contact: TdContact; var HandleCollision: Boolean);
var
comp1 : TGLODEBehaviour;
comp2 : TGLODEBehaviour;
obj1 : TGLCustomSceneObject;
obj2 : TGLCustomSceneObject;


begin
comp1 := Object1 as TGLODEBehaviour;
comp2 := Object2 as TGLODEBehaviour;
obj1 := comp1.Owner.Owner as TGLCustomSceneObject;
obj2 := comp2.Owner.Owner as TGLCustomSceneObject;


if ((obj1.Name = 'pelota') or
(obj1.Name = 'pelota2') or
(obj1.Name = 'pelota3')) and ((obj2.Name = 'bloque1') or
(obj2.Name = 'bloque2') or
(obj2.Name = 'bloque3'))then
begin
colisionActual := true;
if colisionAnterior = false then

begin
obj2.Tag := obj2.Tag+1;

if obj2.Tag = 1 then
obj2.Material.Texture.Image.LoadFromFile('prueba piedra.JPG')

else

begin
comp2.Manager := nil;
obj2.Visible := false;
end;
end;
end;
end;




end.

rgstuamigo 07-12-2009 14:32:02

Bueno creo que tienes varias alternastivas para la reproduccion de sonido en delphi; entre las cuales te puedo citar:
1: Usar el Componente TMediaPlayer de la pestaña System de la paleta.
2:Usar la funcion (API) sndPlaySound de la unidad MMSystem.
3: Usar un componente de Tercero.
La mejor opcion segun veo tu caso :rolleyes:, es usar la segunda alternativa, es decir la funcion sndPlaySound de la unidad MMSystem.;)
Ejemplo de uso:
Código Delphi [-]
uses MMSystem,...;
...
...
...

procedure TForm1.Button1Click(Sender: TObject);
begin
sndPlaySound('C:\Archivos de programa\Borland\Delphi7\Demos\Football\whistle.wav', SND_ASYNC);
{estoy reproduciendo el archivo whistle.wav que se encuentra en esa ruta,
 Podrias tambien hecharle un vistaso al DEMO que delphi Trae en esa direccion, es un Pequeño Juego. ;)}
end;
Saludos...:)

subrul 07-12-2009 14:41:50

Cargar sonido, etc.
 
Gracias, tu respuesta ha sido clara y sencilla y me ha sido de gran utilidad.

Habia probado anteriormente consndPlaySound, pero no habia puesto MMsystem en el uses, supongo que ese fue mi error.

Respecto a mi pregunta sobre si puedo usar gif's, o el contador de variables, sabrias como ayudarme o asesorarme?


Gracias

rgstuamigo 07-12-2009 15:48:34

Cita:

Empezado por subrul (Mensaje 348343)
...
Respecto a mi pregunta sobre si puedo usar gif's, o el contador de variables, sabrias como ayudarme o asesorarme?
...

Para poder usar Gif, te recomiendo un componente de Tercero por ejemplo en las Librerias Rx's existe el componente TRxGIFAnimator que te reproduce una Imagen GIf. o si no, en Torry vas a encontar muchos.;)
Y sobre tu varible es una buena idea, aunque podrias mejor usar Objetos(aplicar POO), es decir hacer que cada Esfera sea un objeto y bajo ciertas circunstacias(llego a -13) pues el objeto ya sabra destruirse a si mismo,o en todo caso tambien podria tener un controlador de Objetos que haga esa tarea,:rolleyes: que creo que seria mejor.;)
Saludos...:)

Celta 28-09-2010 01:23:02

ooo algo asi
 
o algo asi es lo que uso mucho
en un timer coloco lo siguiente por ejem:
Count := (Count mod 10) + 1;

img.picture.LoadFromFile ('graficos\avionderecha' + IntToStr (Count) + '.png');
entonces cargara las imagenes de la carpate una por una por ejem
si tengo avionderecha1, avionderecha2, etc.me abrira primero el avionderecha1 y segura con avionderecha2
bay! =D


La franja horaria es GMT +2. Ahora son las 22:00:10.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi