none
在VS2003下設計遊戲播放wave音樂 RRS feed

  • 問題

  • 小弟我目前研究一個PDA的射擊遊戲,

    希望可以在遊戲中播放背景音樂。

    目前試過media.player不過這只能用在2005的版本下,

    另外也參考一本書用Directsound,

    不過也是失敗。

     

    據說還可以利用API的方式來播放,

    不過我看了一些的語法還不是很了解,

    因為也沒用過api,

    請問一下以相關的詳細資訊嗎?

     

    因為目前這套遊戲只能利用VS2003來執行編譯

     

     

    2007年5月14日 下午 02:02

解答

  • Hi,

    上面那篇你沒有看嗎?

    &H是VB的東西,C#裡面沒有,&H是16進制表示對應到C#應該是0x;dllimport要引用 System.Runtime.InteropServices。

    2007年5月17日 上午 01:34
    版主

所有回覆

  • Hi,

    在另一篇中是提醒之後智慧型裝置相關問題應該要到這邊發問,不是重新發一次文的意思..

    在上一篇(http://forums.microsoft.com/MSDN-CHT/ShowPost.aspx?PostID=1594247&SiteID=14)中有提到,利用那個方式是可以播放wav檔的,能夠滿足你的需求嗎?

    2007年5月14日 下午 03:00
    版主
  • Code Snippet

     public class sound
     {

      public const SND_FILENAME = &H20000;
      public const SND_SYNC  = &H0;

      public sound()
      {

       PlaySound(GetAppPath() & "\Sounds\Infbeg.wav", 0, 0);

      }


      
      [DllImport ("coredll")]
      public function PlaySound(ByVal lpszName As String  ,
              ByVal hModule  As Integer ,
              ByVal dwFlags  As Integer );
      End Function ;

     }

     

    上面這是小弟我修改後的結果,

    不過有些地方會出現無法在 for、using、fixed 或宣告陳述式中使用超過一個型別
     以及識別碼等警訊。

     

    請問一下有哪些結構有問題嗎?

     

    我只有C++的基礎,對C#的物件觀念不是很熟悉,

    麻煩你指導了

     

    2007年5月14日 下午 03:53
  • Hi,

    本身我是用Visual Basic,對於C#也不是那麼的熟,建議您如果選用C#作為您的開發語言您還是去找本書會比較清楚

    下面程式碼參考看看

    Code Snippet

    using System;
    using System.Drawing;
    using System.Collections;
    using System.Windows.Forms;
    using System.Data;
    using System.Runtime.InteropServices;

    namespace SmartDeviceApplication2
    {
     /// <summary>
     /// Form1 的摘要描述。
     /// </summary>
     public class Form1 : System.Windows.Forms.Form
     {
      private System.Windows.Forms.Button button1;
      private System.Windows.Forms.MainMenu mainMenu1;

      public Form1()
      {
       //
       // Windows Form 設計工具支援的必要項
       //
       InitializeComponent();

       //
       // TODO: 在 InitializeComponent 呼叫之後加入任何建構函式程式碼
       //
      }
      /// <summary>
      /// 清除任何使用中的資源。
      /// </summary>
      protected override void Dispose( bool disposing )
      {
       base.Dispose( disposing );
      }
      #region Windows Form 設計工具產生的程式碼
      /// <summary>
      /// 此為設計工具支援所必須的方法 - 請勿使用程式碼編輯器修改
      /// 這個方法的內容。
      /// </summary>
      private void InitializeComponent()
      {
       this.mainMenu1 = new System.Windows.Forms.MainMenu();
       this.button1 = new System.Windows.Forms.Button();
       //
       // button1
       //
       this.button1.Location = new System.Drawing.Point(96, 128);
       this.button1.Size = new System.Drawing.Size(120, 48);
       this.button1.Text = "button1";
       this.button1.Click += new System.EventHandler(this.button1_Click);
       //
       // Form1
       //
       this.Controls.Add(this.button1);
       this.Menu = this.mainMenu1;
       this.Text = "Form1";
       this.Load += new System.EventHandler(this.Form1_Load);

      }
      #endregion

      /// <summary>
      /// 應用程式的主進入點。
      /// </summary>

      const int SND_FILENAME = 0x20000;
      const int SND_SYNC  = 0x0;

      static void Main()
      {
       Application.Run(new Form1());
      }

      private void Form1_Load(object sender, System.EventArgs e)
      {
       
      }

      [DllImport ("coredll")]
      public static extern int PlaySound(string lpszName  ,int hModule ,int dwFlags  );

      private void button1_Click(object sender, System.EventArgs e)
      {
       PlaySound("Windows\\Alarm1.wav", 0, 0);
      }

     }
    }

     

     

     

     

    2007年5月15日 上午 02:14
    版主
  • Code Snippet

     public class sound
     {
      private const SND_FILENAME = &H20000 ;
      private const SND_SYNC  = &H0  ;

      public sound()
      {

       PlaySound("C:\\pro\\Sounds\\Infbeg.wav", 0, 0);

      }

      
      [DllImport ("coredll")]
      public function PlaySound(LPCSTR pszSound,HMODULE hmod, DWORD fdwSound );

     

     我參考MSDN之後的修改

    http://msdn2.microsoft.com/zh-tw/library/ms229685(VS.80).aspx#Mtps_DropDownFilterText

     

    但是在

     private const SND_FILENAME = &H20000 ;
      private const SND_SYNC  = &H0  ;

    顯示出錯誤,必須是識別碼的問題。

     

     

    Code Snippet

     public class sound
     {
      private byte[] m_soundBytes;
      private string m_fileName;

      private enum Flags
      {
       SND_SYNC = 0x0000,  /* play synchronously (default) */
       SND_FILENAME = 0x00020000, /* name is file name */

      }

      public sound()
      {

       PlaySound("C:\\pro\\Pocket1945\\Sounds\\Infbeg.wav", 0, 0);

      }

      
      [DllImport ("coredll")]
      public Function PlaySound(string szSound, IntPtr hMod, int flags );

     }

     

     這個則是命名空間的問題....

     不曉得該怎樣設定才好。

    2007年5月16日 下午 06:12
  • Hi,

    上面那篇你沒有看嗎?

    &H是VB的東西,C#裡面沒有,&H是16進制表示對應到C#應該是0x;dllimport要引用 System.Runtime.InteropServices。

    2007年5月17日 上午 01:34
    版主