我寫部落格喜歡做完乙個東西,一口氣寫很多章。。。貌似這樣不太好啊~
到這裡,我們似乎該讓主角上場了,好就讓我們來顯示一顆子彈吧~
慢著,顯示子彈之前,我們需要小小的抽象一下,把遊戲中所有能顯示的物體抽象成gameobject,好處是什麼?好處是看起來很帥。。
當然不是,好處簡單來說,整合公共部分、利於管理~~好吧我也不知道好處。。。。
/// /// description of gameobject.
///
public class gameobject
public virtual void update(float elapsedtime)
public virtual void render(graphics g)
}
封裝了一些基礎屬性和方法~~特別說明下:halfwidth和halfheight只是用於計算的時候少乙個除法,可以不需要的,後面的**會看到
對了,特別說明下:一般的座標系是以左上角為(0,0)點,向右為x正方向,向下為y正方向。
而這個遊戲是以螢幕的中間為遠點,繪製的時候也是,以的中間為繪製點。。。至於為什麼這樣。。我當時腦抽了,忘了為什麼了
接下來就是主角
/// /// description of gamebullet.
///
public class gamebullet : gameobject
public override void update(float elaspedtime)
if (activedelay > 0)
speed += (accel * elaspedtime);
position += (speed * elaspedtime);
boxcollider.x = (int)position.x;
boxcollider.y = (int)position.y;
if ( position.x < 0 || position.y < 0 || position.x > config.screenwidth || position.y > config.screenheight )
}public override void render(graphics g)
g.drawimage(data.bulletssource[this.type],
new rectangle((int)position.x - halfwidth, (int)position.y - halfheight, width, height),
new rectangle(this.color * width, 0, width, height),
graphicsunit.pixel);
if ( config.isdebug && config.isshowbox )
}}
唯一要說明的是update方法的這兩句
speed += (accel * elaspedtime);
position += (speed * elaspedtime);
通過速度和加速度來更新子彈的位置,並且在後面同步更新碰撞盒的位置
這裡用簡單的物理知識來模擬了一下粒子的執行~其實可以做的更複雜一點,比如線速度角速度。
我們這裡學習用,就簡單一點。東方系列就比較複雜了
子彈肯定不止乙個,而且有自己的和敵人的
所以需要乙個管理類,用於管理一堆子彈
public class gamebulletmanager
public void addbullet(gamebullet bullet)
public void update(float elapsedtime)
if ( mbullets[i].isown == false ) // 不是自己的子彈
}else
if ( mscene.bossmanager.collide(mbullets[i].boxcollider, 1) == true )}}
} public void render(graphics g)
if ( config.isdebug )
}}
這裡面沒有遇到的類暫且不管。
大體上就是用乙個list來儲存所有gamebullet~~更新和繪製也是乙個迴圈
唯一要做的就是檢測子彈和其餘單位是否碰撞了,碰撞的話要新增**效果,然後移除這個子彈
好,現在你可以新增幾個子彈來玩玩了。
比如,建立乙個直線上公升的子彈
addbullet(new bullet(false, new vector2(0, 0), new vector2(0, -300), vector2.zero, 0, 0, 0);
建立乙個斜著飛的子彈
addbullet(new bullet(false, new vector2(0, 0), new vector2(300, -300), vector2.zero, 0, 0, 0);
建立乙個越飛越快的子彈
addbullet(new bullet(false, new vector2(0, 0), new vector2(0, -300), new vector2(0, -100), 0, 0, 0);
大概就是這樣
基於C 彈幕類射擊遊戲的實現 (七)彈幕類實現
如果只有這些子彈,那看起來必然是很一般的,想想看,只有幾顆子彈,孤零零的從下面跑到上面。gamebarrage彈幕類,用於建立一些酷炫叼的彈幕 其實核心也就是通過一些數學公式,然後批量addbullet而已 先來看看型別的定義 public enum barragetype 初步就這四種,其餘的彈幕...
基於C 彈幕類射擊遊戲的實現 (五)主場景
這裡的的gamescene就是乙個用於管理所有物件的類。整個遊戲只有乙個scene 其實還有menuscene,loadscene之類的,但這裡沒有做,在下乙個遊戲 超級瑪麗 裡會有詳細的介紹 先來看看申明部分 public static gamescene mainscene null priva...
基於C語言實現三子棋遊戲
說到三子棋,我想大家一定不陌生吧,它也是我童年中的一部分,今天我們用c語言來實現一下簡易版的三子棋。首先,介紹一下遊戲規則 1.在乙個九程式設計客棧宮格上進行下棋 2.玩家兩名,雙方先後落子 3.若在一條直線上有三顆同一玩家的棋子,則該玩家贏,若棋盤下滿也沒有出現三顆棋子在一條直線上,則為平局。1....