【v2.x OGE-example 第一节】 绘制实体
2019獨角獸企業重金招聘Python工程師標準>>>
?
前言:
????OGE即?OGEngine,是由橙子游戲開發的基于Java支持跨平臺的開源游戲引,從12年4月項目成立至今已經有2年多的發展歷程。在此期間基于OGEngine開發的項目已經有很多成功投放市場。從正式開源開始,好多開發者開始加入OGEngine的行列,同時在官網、論壇、Q群、看到有好多的問題,大部分是一些新手的問題,經常會被重復的提問。有些是之前用過AndEngine的,對OGEngine的使用會有些出入,開發時不是很順手。為此今天開始寫一個OGE-Example;大家在學習OGEengine時可參考這些例子,應該會更容易上手些。
?
正文:
?????首先,先講解一下這個OGE-example的思路框架,這些案例都會放到一個項目里,用list顯示,會分兩級菜單,從最簡單開始,后續會隨著引擎的發展在加入一些例子,也都會放在這個項目里邊,方便大家學習和使用。
一、導入OGE-example注意事項:
1.先學習想要運行平臺下的環境搭建android搭建:http://dev.ogengine.com/forum.php?mod=viewthread&tid=629&extra=page%3D1,或ios搭建:http://dev.ogengine.com/forum.php?mod=viewthread&tid=631&extra=page%3D1;
2.OGE-example項目現支持兩個平臺運行(android和ios),這些案例會用到一些圖片和字
體,需要把這些資源加載到對應的啟動器里邊(android和ios啟動器);
放在Android啟動器下:
?
放在IOS啟動器下:
?
?
OGE-example?項目結構:
?
第一章
第一節:實體的繪制
1.?位置:Drawing_example?-->?DrawingSprite
2.?類名:DrawingSprite
?
?
(1)繪制線條:
?線條Line:Line(float?pX1,?float?pY1,?float?pX2,?float?pY2,?float?pLineWidth,?VertexBufferObjectManager?pVertexBufferObjectManager)
pX1,pY1線條起點位置
pX2,pY1線條終點位置
pLineWidth:線條寬度
setColor(float?pRed,?float?pGreen,?float?pBlue)線條顏色?
pRed紅色
pGreen綠色
pBlue藍色
顏色值最小是0最大是1,平時輸入具體的顏色值可以這樣輸入?setColor(204/255,4/255,201/255)
VertexBufferObjectManager頂點緩存對象管理
?
/**
?*?畫出100條直線,位置、顏色隨機
?*/
private?void?drawingLine()?{
final?long?RANDOM_SEED?=?1234567890;//隨機數種子
final?Random?random?=?new?Random(RANDOM_SEED);
for?(int?i?=?0;?i?<?100;?i++)?{
final?float?x1?=?random.nextFloat()?*?300;//線x起點?隨機0-300
final?float?x2?=?random.nextFloat()?*?300;//線x終點?隨機0-300
final?float?y1?=?random.nextFloat()?*?480;//線y起點?隨機0-480
final?float?y2?=?random.nextFloat()?*?480;//線y終點?隨機0-480
final?float?lineWidth?=?random.nextFloat()?*?5;//線的寬度?隨機0-5
?
final?Line?line?=?new?Line(x1,?y1,?x2,?y2,?lineWidth,
getVertexBufferObjectManager());//畫線
?
line.setColor(random.nextFloat(),?random.nextFloat(),
random.nextFloat());//設置顏色值?范圍0-1
?
this.attachChild(line);//加入本場景?實體只有加入場景后才會被繪制和更新狀態
}
}
(2).繪制矩形
矩形:Rectangle(float?pX,?float?pY,?float?pWidth,?float?pHeight,?VertexBufferObjectManager?pVertexBufferObjectManager)
???pX,?pY?矩形位置
??pWidth,pHeight?矩形寬高
VertexBufferObjectManager?頂點緩存對象管理
?
/**
?*?畫出4個矩形
?*/
private?void?drawingRectangle()?{
//?紅色矩形
Rectangle?rectangle0?=?new?Rectangle(300,?120,?100,?100,
getVertexBufferObjectManager());//繪制矩形,位置x300,位置y120,寬100,高100
rectangle0.setColor(1,?0,?0);//設置為紅色?紅Red:1?即255/255
this.attachChild(rectangle0);//加入本場景?實體只有加入場景后才會被繪制和更新狀態
//?綠色矩形
Rectangle?rectangle1?=?new?Rectangle(400,?120,?100,?100,
getVertexBufferObjectManager());//繪制矩形,位置x400,位置y120,寬100,高100
rectangle1.setColor(0,?1,?0);//設置為綠色?綠Green:1
this.attachChild(rectangle1);//加入本場景?實體只有加入場景后才會被繪制和更新狀態
//?藍色矩形
Rectangle?rectangle2?=?new?Rectangle(300,?220,?100,?100,
getVertexBufferObjectManager());//繪制矩形,位置x300,位置y220,寬100,高100
rectangle2.setColor(0,?0,?1);//設置為藍色?藍Blue:1
this.attachChild(rectangle2);//加入本場景?實體只有加入場景后才會被繪制和更新狀態
//?黃色矩形
Rectangle?rectangle3?=?new?Rectangle(400,?220,?100,?100,
getVertexBufferObjectManager());//繪制矩形,位置x400,位置y220,寬100,高100
rectangle3.setColor(1,?1,?0);//設置為紅色?紅Red:1,綠色?綠Green:1?相加后為黃色
this.attachChild(rectangle3);//加入本場景?實體只有加入場景后才會被繪制和更新狀態
}
(3).畫圖片精靈
圖片精靈AnimatedSprite(float?pX,?float?pY,?String?pTextureRegionName,?VertexBufferObjectManager?pVertexBufferObjectManager)
pX,??pY,精靈位置
pTextureRegionName?圖片名稱
/**
?*?畫圖片精靈
?*/
private?void?drawingPic()?{
//?畫一個精靈
AnimatedSprite?pea?=?new?AnimatedSprite(600,?30,?Regions.PEA,
getVertexBufferObjectManager());//繪制一個圖片精靈?位置x?600?,位置y?30,?圖片名稱引用Regions.PEA
this.attachChild(pea);//加入本場景?實體只有加入場景后才會被繪制和更新狀態
?
}
?
(4).畫動畫精靈
動畫畫精靈AnimatedSprite(float?pX,?float?pY,?String?pTextureRegionName,?VertexBufferObjectManager?pVertexBufferObjectManager)
pX,??pY,精靈位置
pTextureRegionName?圖片名稱
animate(long?pFrameDurationEach)動畫精靈的幀速
?
/**
?*?畫飛機精靈
?*/
private?void?drawingPlane()?{
//?畫一個動畫精靈?
AnimatedSprite?plane?=?new?AnimatedSprite(610,?140,?Regions.PLANE,
getVertexBufferObjectManager());//繪制動畫精靈,?位置x?610?,位置y?140,?圖片名稱引用Regions.PLANE
this.attachChild(plane);//加入本場景?實體只有加入場景后才會被繪制和更新狀態
//?播放幀速?,?每幀的持續時間?,?以毫秒為單位計算
plane.animate(180);
plane.setIgnoreTouch(false);//設置阻止觸摸為false
}
(6).?刪除精靈
Entity:attachChild(IEntity?pEntity);attachChild加入一個實體
detachChild(IEntity?pEntity);detachChild刪除一個實體
?
/**
?*?精靈刪除
?*/
private?void?removingSprite()?{
ButtonSprite?btnSprite?=?new?ButtonSprite(610,?200,?Regions.BACK_BTN,
getVertexBufferObjectManager());//繪制一個按鈕精靈?位置x?610?,位置y?200,?圖片名稱引用Regions.BACK_BTN
this.attachChild(btnSprite);//加入本場景?實體只有加入場景后才會被繪制和更新狀態
btnSprite.setOnClickListener(new?OnClickListener()?{//注冊按鍵監聽
@Override
public?void?onClick(ButtonSprite?pButtonSprite,//響應點擊
float?pTouchAreaLocalX,?float?pTouchAreaLocalY)?{
System.out.println("detach?btnSprite");
DrawingSprite.this.detachChild(pButtonSprite);//刪除實體?實體刪除后不在繪制和更新狀態
}
});
?
}
?
}
?
OGE_Example項目源碼
?
?
?
轉載于:https://my.oschina.net/orangegame/blog/338405
《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀總結
以上是生活随笔為你收集整理的【v2.x OGE-example 第一节】 绘制实体的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mount挂载windows共享文件夹
- 下一篇: SpringQuartz定时任务调度器