none
c#遊戲程式設計 RRS feed

  • 問題

  • 想請問一下底下接球(長方形)跟球碰撞在一起的時候要怎麼反彈
    和碰觸到畫面最底下時遊戲結束

    我目前只會寫到球碰到會反彈而已

    以下是我目前寫出的程式碼

    請各位幫幫忙~

     

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;

    namespace ball_move
    {
        public partial class Form1 : Form
        {
            int myX = 5;
            int myY = 5;
          

            public Form1()
            {
                InitializeComponent();
            }

            private void timer1_Tick(object sender, EventArgs e)
            {
                if (ball.Left >= 300) {  //設定畫面最右邊的邊界
                    myX += 1;       //每碰撞一次 X軸加1(速度改變)
                    myX *= (-1);      // 撞到牆後,乘以(-1)改變方向
                }
                if (ball.Top >= 300) {  //設定畫面最下面的邊界
                    myY += 1;      //每碰撞一次 Y軸加1(速度改變)
                    myY *= (-1);     // 撞到牆後,乘以(-1)改變方向
                }
                if (ball.Top <= 0)//設定畫面最上面的邊界
                {
                    myY *= (-1);   // 撞到牆後,乘以(-1)改變方向
                    timer1.Interval -= 2;  //每碰撞一次 timer的毫秒 -2(速度改變)
                }
                if (ball.Left <= 0)//設定畫面最左邊的邊界
                {
                    myX *= (-1);    // 撞到牆後,乘以(-1)改變方向
                    timer1.Interval -= 2;   //每碰撞一次 timer的毫秒 -2(速度改變)
                }

                ball.Left += myX;
                ball.Top += myY;
            }

           
        }
    }

    2010年4月15日 上午 08:04

解答

所有回覆

  • hi

    可以參考

    Space Breakout - 2D Game Developed using DirectX and C#


    Welcom to my personal blog:http://www.dotblogs.com.tw/ricochen/Default.aspx
    2010年4月15日 上午 08:57
  • Hi...
    依你的目前情況,你的問題是 「碰觸到畫面最底下時遊戲結束」對吧?
    我不知道你的「畫面」是指什麼?
    是指視窗的畫面?  還是指螢幕的畫面?

    再者 ,如果你的範圍是僅限於在視窗範圍內,那麼,另一個問題是...
    你該視窗是單單用Winform 來做範圍?還是你自己有加入什麼 pannel 之類的來當成您的範圍呢?

    可以與你分享一個想法,不管你是運用哪個物件來當成您的範圍,你可以運用邊界的想法來處理。
    舉例來說,假設我用最簡單的 Pannel 來當我的 乒乓球可跑的範圍,
    那麼你的 pannel 一定會有 Height 這個屬性值吧?!

    此時你只要判斷你的球是否與 Pannel 的 Height 相同就行啦!
    ( 請注意:還要記得扣除你的球體的高度喔...不然你可能因你的設計會看到你的球完成不見了才停止 game)

    我給你個片段程式碼,是提供你想法參考 

    private void panel1_MouseClick(object sender, MouseEventArgs e)

      // 這程式碼是告訴你當我的 MouseClick 事件在 panel 中要做的事  
      // 目前我只是 show 個 MessageBox,你可以改成你要的程式內容  
      MessageBox.Show("現在 Y 軸是在..." + e.Y.ToString());
    }

     

    至於你要如何停止 game ,就看你如何設計了...
    1. 你可以當你偵測到碰到底時,就觸發某一事件
    2. 你也可以用另一方法來不斷偵測...
    3.......(請自己依自己的情況來考量...)

     


    逐步學習,逐夢踏實;腳步要踩穩,這樣下一步才不會跌倒。 http://www.dotblogs.com.tw/nobel12
    2010年4月16日 上午 01:56