I have a question about music
BlitzPlus Forums/BlitzPlus Beginners Area/I have a question about music
| ||
I'm trying to find out what do I add to my game program below if I want to change the music each time my character collides with a door? Details about what I'm trying to do is below inside some brackets (so that my problem could be easier to find):Graphics 1640, 1000 HENRY = LoadAnimImage ("HenryMoveAroundIII.PNG",400,370,0,14) BACKGROUND = LoadImage ("DockII.jpg") BACKGROUND2= LoadImage ("My Backyard2.png") DOOR = LoadImage ("Door.png") DOOR2 = LoadImage ("Door3.png") ;---------------------------------------------------------------------------------------------------------------------------- ;MUSIC ;------ ;Below is the music that I want to have played MUSIC = PlayMusic ("EarthToneNewFire.wav") ;This music starts from the very beginning when my charcter HENRY hasn't collided with a door. MUSIC2 = LoadSound ("04 Gianni Schicchi- O mio babbino caro.wav") ;This music starts when my charcter HAS collided with the FIRST door and hence, it turns off the beginning music. MUSIC3 = LoadSound ("Way back.wav"); This music starts when my character has collided with the SECOND door and hence, turns off ; the music from when my character collided with the first door. ;--------------------------------------------------------------------------------------------------------------------------- Type HENRY Field x,y Field frame End Type Type DOOR Field x,y End Type Type DOOR2 Field x,y End Type Type BACKGROUND Field x,y Field image End Type h.HENRY = New HENRY h\x = 500 h\y = 250 h\frame = 0 door1st.DOOR = New DOOR door1st\x = 500 door1st\y = 25 door2nd.DOOR2 = New DOOR2 door2nd\x = 700 door2nd\y = 110 b.BACKGROUND = New BACKGROUND b\x = 100 b\y = 0 b\image = BACKGROUND While Not KeyDown(1) Cls TileImage (b\image,b\x,b\y) If KeyHit(25) h\frame = h\frame + 1 If h\frame > 7 h\frame = 6 EndIf ; If h\frame < 6 h\frame = 6 EndIf EndIf If KeyHit(24) h\frame = h\frame + 1 If h\frame > 9 h\frame = 8 EndIf h\frame = 8 EndIf If KeyDown(205) h\x = h\x + 3 h\frame = h\frame + 1 If h\frame > 2 Then h\frame = 1 EndIf If h\frame < 0 h\frame = 0 EndIf EndIf If KeyDown(203) h\x = h\x - 3 h\frame = h\frame + 1 If h\frame > 5 Then h\frame = 4 EndIf If h\frame < 4 h\frame = 4 EndIf EndIf ;------------------------------------------------------- ;Inside these brackets is the part I need help with ;------------------------------------------------------- If ImagesCollide (HENRY, h\x, h\y,0,DOOR, door1st\x, door1st\y,0) Then door1st\x = 300000 ;When HENRY collides with this ;door1st\x, it stops the beginning music ;and changes to a new song door2nd\x = 100 door2nd\y = 250 b\image = BACKGROUND2 EndIf If ImagesCollide (HENRY, h\x, h\y,0,DOOR2, door2nd\x, door2nd\y,0) Then door2nd\x = 700000 ;When HENRY collides with ;door2nd\x, it stops the music from the ;FIRST door and changes to a new song ;again. b\image = BACKGROUND2 EndIf ;-------------------------------------------------------------------- ;Thanks, from here that would be all the help I need for now. ;I'll come back if I have anymore questions. ;-------------------------------------------------------------------- DrawImage (DOOR, door1st\x,door1st\y) DrawImage (DOOR2, door2nd\x,door2nd\y) DrawImage (HENRY,h\x,h\y,h\frame) Flip Wend Last edited 2011 Last edited 2011 Last edited 2011 Last edited 2011 Last edited 2011 Last edited 2011 Last edited 2011 Last edited 2011 Last edited 2011 Last edited 2011 Last edited 2011 |
| ||
The code below is just a direct port of your psuedo code. But the best solution I can think of is to have all you music loaded, looped and paused (loadsound(filename.wav, 3)) in an array. Then use a global variable to track the current song and a simple state machine to update the music.... global current_song = 0 music1 = loadsound("filename.wav") music2 = loadsound("filename.wav") music3 = loadsound("filename.wav") dim songs(2) songs(0) = Playsound(music1,3) songs(1) = Playsound(music2,3) songs(2) = Playsound(music3,3) while true ; handel input ; handel events If (character collides with a door) then change_music(door_number) EndIf ; render graphic Wend End Function change_music(index) StopChannel(songs(current_channel)) ResumeChannel(songs(index)) current_channel = index End Function |
| ||
Thanks Moore, it worked! |