精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

分享一個有趣的鴻蒙分布式小游戲

OpenHarmony技術(shù)社區(qū) ? 來源:鴻蒙技術(shù)社區(qū) ? 作者:維京戰(zhàn)斧 ? 2021-11-01 14:29 ? 次閱讀

今天給大家分享一個有趣的鴻蒙分布式小游戲:你畫我猜。

開發(fā)心得(如有錯誤還請大佬及時指正):

  • 分布式流轉(zhuǎn):一個 APP 應(yīng)用在設(shè)備之間互相拉起遷移,只在一個終端上運行。

  • 分布式協(xié)同:一個 APP 同時在多個設(shè)備上運行,畫面實時共享,數(shù)據(jù)實時傳輸。

在工程創(chuàng)立之后,首先有個很重要的事情那就是驗權(quán)。

①這個分布式協(xié)同會用到一個權(quán)限接口,去 MainAbilitySlice 里面申請

分布式數(shù)據(jù)管理 ohos.permission.DISTRIBUTED_DATASYNC 允許不同設(shè)備間的數(shù)據(jù)交換。
voidgrantPermission(){//獲取驗證權(quán)限數(shù)據(jù)交互允許不同設(shè)備間的數(shù)據(jù)交換。
if(verifySelfPermission(DISTRIBUTED_DATASYNC)!=IBundleManager.PERMISSION_GRANTED){
if(canRequestPermission(DISTRIBUTED_DATASYNC)){
requestPermissionsFromUser(newString[]{DISTRIBUTED_DATASYNC},PERMISSION_CODE);
}
}
}

權(quán)限接口文檔鏈接

https://developer.harmonyos.com/cn/docs/documentation/doc-guides/security-permissions-available-0000001051089272

②權(quán)限申請

開發(fā)者需要在 config.json 文件中的“reqPermissions”字段中聲明所需要的權(quán)限。

{
"module":{
"reqPermissions":[
{
"name":"ohos.permission.CAMERA",
"reason":"$string:permreason_camera",
"usedScene":
{
"ability":["com.mycamera.Ability","com.mycamera.AbilityBackground"],
"when":"always"
}
},{
...
}
]
}
}
}

351c9594-3ac5-11ec-82a9-dac502259ad0.png
{
"name":"ohos.permission.DISTRIBUTED_DEVICE_STATE_CHANGE"//允許獲取分布式組網(wǎng)內(nèi)設(shè)備的狀態(tài)變化。
},
{
"name":"ohos.permission.GET_DISTRIBUTED_DEVICE_INFO"//允許獲取分布式組網(wǎng)內(nèi)的設(shè)備列表和設(shè)備信息
},
{
"name":"ohos.permission.GRT_BUNDLE_INFO"//查詢其他應(yīng)用的信息。
},
{
"name":"ohos.permission.INTERNET"//允許使用網(wǎng)絡(luò)socket。
}

應(yīng)用權(quán)限列表文檔鏈接:

https://developer.harmonyos.com/cn/docs/documentation/doc-guides/security-permissions-guidelines-0000000000029886

再看頁面結(jié)構(gòu):

在 resources 下面的:
  • graphic:頁面樣式效果調(diào)配

  • layoput:此 demo 的 java UI 頁面布局結(jié)構(gòu)

主頁面入口布局代碼 ability_main:



<DirectionalLayout
xmlns:ohos="http://schemas.huawei.com/res/ohos"
ohos:height="match_parent"
ohos:width="match_parent"
ohos:orientation="vertical"
ohos:background_element="$graphic:background_button">

<Text
ohos:height="match_content"
ohos:width="match_content"
ohos:top_margin="150px"
ohos:layout_alignment="horizontal_center"
ohos:text="你好鴻蒙_你畫我猜"
ohos:text_size="38fp"
/>

<Image
ohos:id="$+id:imageComponent"
ohos:height="200vp"
ohos:width="1080"
ohos:top_margin="150px"
ohos:image_src="$media:HM"
/>

<Button
ohos:id="$+id:help_btn"
ohos:height="100vp"
ohos:width="300vp"
ohos:background_element="$graphic:background_button"
ohos:layout_alignment="horizontal_center"
ohos:left_padding="15vp"
ohos:right_padding="15vp"
ohos:text="進(jìn)入游戲"
ohos:text_size="30vp"
ohos:top_margin="20vp">
Button>


DirectionalLayout>

游戲匹配頁面布局 math_game:



<DirectionalLayout
xmlns:ohos="http://schemas.huawei.com/res/ohos"
ohos:height="match_parent"
ohos:width="match_parent"
ohos:orientation="vertical">

<Button
ohos:id="$+id:help_btn"
ohos:height="match_content"
ohos:width="500px"
ohos:background_element="$graphic:background_begin"
ohos:layout_alignment="horizontal_center"
ohos:left_padding="15vp"
ohos:right_padding="15vp"
ohos:text="匹配對手"
ohos:text_size="30vp"
ohos:top_margin="200vp">
Button>
<Image
ohos:id="$+id:imageComponent"
ohos:height="200vp"
ohos:width="1080"
ohos:top_margin="100px"
ohos:image_src="$media:NHWC"

/>

DirectionalLayout>

MainAbilitySlice:

packagecom.huawei.codelab.slice;

importstaticohos.security.SystemPermission.DISTRIBUTED_DATASYNC;

importcom.huawei.codelab.ResourceTable;
importcom.huawei.codelab.utils.CommonData;
importcom.huawei.codelab.utils.LogUtil;
importohos.aafwk.ability.AbilitySlice;
importohos.aafwk.content.Intent;
importohos.aafwk.content.Operation;
importohos.agp.components.Component;
importohos.bundle.IBundleManager;



publicclassMainAbilitySliceextendsAbilitySlice{
privatestaticfinalStringTAG=CommonData.TAG+MainAbilitySlice.class.getSimpleName();

privatestaticfinalintPERMISSION_CODE=10000000;

@Override
publicvoidonStart(Intentintent){
super.onStart(intent);
super.setUIContent(ResourceTable.Layout_ability_main);
grantPermission();
initView();
}

voidgrantPermission(){//獲取驗證權(quán)限數(shù)據(jù)交互允許不同設(shè)備間的數(shù)據(jù)交換。
if(verifySelfPermission(DISTRIBUTED_DATASYNC)!=IBundleManager.PERMISSION_GRANTED){
if(canRequestPermission(DISTRIBUTED_DATASYNC)){
requestPermissionsFromUser(newString[]{DISTRIBUTED_DATASYNC},PERMISSION_CODE);
}
}
}
//
privatevoidinitView(){
findComponentById(ResourceTable.Id_help_btn).setClickedListener(newButtonClick());

}

privatevoidmathGame(){//數(shù)學(xué)游戲
LogUtil.info(TAG,"ClickResourceTableId_math_game");
IntentmathGameIntent=newIntent();
OperationoperationMath=newIntent.OperationBuilder().withBundleName(getBundleName())
.withAbilityName(CommonData.ABILITY_MAIN)
.withAction(CommonData.MATH_PAGE)
.build();
mathGameIntent.setOperation(operationMath);
startAbility(mathGameIntent);
}

//進(jìn)入游戲
privateclassButtonClickimplementsComponent.ClickedListener{
@Override
publicvoidonClick(Componentcomponent){
mathGame();
}
}

}

MathGameAbilitySlice:

packagecom.huawei.codelab.slice;
importcom.huawei.codelab.ResourceTable;
importcom.huawei.codelab.devices.SelectDeviceDialog;
importcom.huawei.codelab.utils.CommonData;
importcom.huawei.codelab.utils.LogUtil;
importohos.aafwk.ability.AbilitySlice;
importohos.aafwk.content.Intent;
importohos.aafwk.content.Operation;
importohos.agp.components.Button;
importohos.agp.components.Component;
importohos.data.distributed.common.KvManagerConfig;
importohos.data.distributed.common.KvManagerFactory;
importohos.distributedschedule.interwork.DeviceInfo;
importohos.distributedschedule.interwork.DeviceManager;
importjava.util.ArrayList;
importjava.util.List;


publicclassMathGameAbilitySliceextendsAbilitySlice{
privatestaticfinalStringTAG=CommonData.TAG+MathGameAbilitySlice.class.getSimpleName();

privateButtonhelpBtn;

privateListdevices=newArrayList<>();

@Override
publicvoidonStart(Intentintent){
super.onStart(intent);
super.setUIContent(ResourceTable.Layout_math_game);
initView();

}

privatevoidinitView(){

if(findComponentById(ResourceTable.Id_help_btn)instanceofButton){
helpBtn=(Button)findComponentById(ResourceTable.Id_help_btn);
}
helpBtn.setClickedListener(newButtonClick());
}


privatevoidgetDevices(){
if(devices.size()>0){
devices.clear();
}
ListdeviceInfos=
DeviceManager.getDeviceList(ohos.distributedschedule.interwork.DeviceInfo.FLAG_GET_ONLINE_DEVICE);
LogUtil.info(TAG,"MathGameAbilitySlicedeviceInfossizeis:"+deviceInfos.size());
devices.addAll(deviceInfos);
showDevicesDialog();
}

privatevoidshowDevicesDialog(){
newSelectDeviceDialog(this,devices,deviceInfo->{
startLocalFa(deviceInfo.getDeviceId());
startRemoteFa(deviceInfo.getDeviceId());
}).show();
}

privatevoidstartLocalFa(StringdeviceId){
LogUtil.info(TAG,"startLocalFa......");
Intentintent=newIntent();
intent.setParam(CommonData.KEY_REMOTE_DEVICEID,deviceId);
intent.setParam(CommonData.KEY_IS_LOCAL,true);
Operationoperation=newIntent.OperationBuilder().withBundleName(getBundleName())
.withAbilityName(CommonData.ABILITY_MAIN)
.withAction(CommonData.DRAW_PAGE)
.build();
intent.setOperation(operation);
startAbility(intent);
}

privatevoidstartRemoteFa(StringdeviceId){
LogUtil.info(TAG,"startRemoteFa......");
StringlocalDeviceId=
KvManagerFactory.getInstance().createKvManager(newKvManagerConfig(this)).getLocalDeviceInfo().getId();
Intentintent=newIntent();
intent.setParam(CommonData.KEY_REMOTE_DEVICEID,localDeviceId);
intent.setParam(CommonData.KEY_IS_LOCAL,false);
Operationoperation=newIntent.OperationBuilder().withDeviceId(deviceId)
.withBundleName(getBundleName())
.withAbilityName(CommonData.ABILITY_MAIN)
.withAction(CommonData.DRAW_PAGE)
.withFlags(Intent.FLAG_ABILITYSLICE_MULTI_DEVICE)
.build();
intent.setOperation(operation);
startAbility(intent);
}

privateclassButtonClickimplementsComponent.ClickedListener{
@Override
publicvoidonClick(Componentcomponent){
getDevices();//啟動機(jī)器匹配
}
}
}

責(zé)任編輯:haq


聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 鴻蒙系統(tǒng)
    +關(guān)注

    關(guān)注

    183

    文章

    2634

    瀏覽量

    66220
  • HarmonyOS
    +關(guān)注

    關(guān)注

    79

    文章

    1967

    瀏覽量

    30019

原文標(biāo)題:鴻蒙版你畫我猜,請接招!

文章出處:【微信號:gh_834c4b3d87fe,微信公眾號:OpenHarmony技術(shù)社區(qū)】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    鴻蒙ArkTS聲明開發(fā):跨平臺支持列表【分布式遷移標(biāo)識】 通用屬性

    組件的分布式遷移標(biāo)識,指明了該組件在分布式遷移場景下可以將特定狀態(tài)恢復(fù)到對端設(shè)備。
    的頭像 發(fā)表于 06-07 21:15 ?357次閱讀

    鴻蒙開發(fā)接口數(shù)據(jù)管理:【@ohos.data.distributedData (分布式數(shù)據(jù)管理)】

    分布式數(shù)據(jù)管理為應(yīng)用程序提供不同設(shè)備間數(shù)據(jù)庫的分布式協(xié)同能力。通過調(diào)用分布式數(shù)據(jù)各個接口,應(yīng)用程序可將數(shù)據(jù)保存到分布式數(shù)據(jù)庫中,并可對分布式
    的頭像 發(fā)表于 06-07 09:30 ?893次閱讀
    <b class='flag-5'>鴻蒙</b>開發(fā)接口數(shù)據(jù)管理:【@ohos.data.distributedData (<b class='flag-5'>分布式</b>數(shù)據(jù)管理)】

    鴻蒙HarmonyOS開發(fā)實戰(zhàn):【分布式音樂播放】

    本示例使用fileIo獲取指定音頻文件,并通過AudioPlayer完成了音樂的播放完成了基本的音樂播放、暫停、上曲、下曲功能;并使用DeviceManager完成了分布式設(shè)備列表的顯示和
    的頭像 發(fā)表于 04-10 17:51 ?816次閱讀
    <b class='flag-5'>鴻蒙</b>HarmonyOS開發(fā)實戰(zhàn):【<b class='flag-5'>分布式</b>音樂播放】

    鴻蒙OS 分布式任務(wù)調(diào)度

    鴻蒙OS 分布式任務(wù)調(diào)度概述 在 HarmonyO S中,分布式任務(wù)調(diào)度平臺對搭載 HarmonyOS 的多設(shè)備構(gòu)筑的“超級虛擬終端”提供統(tǒng)的組件管理能力,為應(yīng)用定義統(tǒng)
    的頭像 發(fā)表于 01-29 16:50 ?460次閱讀

    什么是分布式架構(gòu)?

    分布式架構(gòu)是指將系統(tǒng)或應(yīng)用拆分成多個獨立的節(jié)點,這些節(jié)點通過網(wǎng)絡(luò)連接進(jìn)行通信和協(xié)作,以實現(xiàn)共同完成任務(wù)的種架構(gòu)模式。這種架構(gòu)模式旨在提高系統(tǒng)的可擴(kuò)展性、可靠性和性能表現(xiàn)。
    的頭像 發(fā)表于 01-12 15:04 ?1166次閱讀
    什么是<b class='flag-5'>分布式</b>架構(gòu)?

    鴻蒙千帆起】《開心消消樂》完成鴻蒙原生應(yīng)用開發(fā),創(chuàng)新多端聯(lián)動用戶體驗

    加強(qiáng)游戲與玩家之間交互的提醒,用戶不需要頻繁打開游戲就能接收到游戲中的關(guān)鍵信息,比如精力恢復(fù)、新關(guān)卡開放、活動信息提醒等,給玩家提供了更加便捷的游戲體驗。 同時,HarmonyOS 特
    發(fā)表于 01-03 10:22

    鴻蒙千帆起】桌游卡牌游戲品類首發(fā)!《三國殺》完成鴻蒙原生應(yīng)用開發(fā)

    中心的深度合作已逾10年,在今年HDC上更榮獲了“鴻蒙生態(tài)先鋒游戲”等重要獎項。依托鴻蒙分布式技術(shù),《三國殺》系列游戲將為用戶帶來更流暢、更
    的頭像 發(fā)表于 12-21 21:15 ?726次閱讀
    【<b class='flag-5'>鴻蒙</b>千帆起】桌游卡牌<b class='flag-5'>游戲</b>品類首發(fā)!《三國殺》完成<b class='flag-5'>鴻蒙</b>原生應(yīng)用開發(fā)

    網(wǎng)易游戲與華為就鴻蒙生態(tài)達(dá)成合作

    網(wǎng)易游戲與華為就鴻蒙生態(tài)達(dá)成合作 基于鴻蒙分布式技術(shù)、原生智能等方面能力,鴻蒙生態(tài)發(fā)展越發(fā)迅速。 12月15日網(wǎng)易
    的頭像 發(fā)表于 12-15 18:24 ?804次閱讀

    鴻蒙原生應(yīng)用開發(fā)——分布式數(shù)據(jù)對象

    01、什么是分布式數(shù)據(jù)對象 在可信組網(wǎng)環(huán)境下,多個相互組網(wǎng)認(rèn)證的設(shè)備將各自創(chuàng)建的對象加入同一個 sessionId,使得加入的多個數(shù)據(jù)對象之間可以同步數(shù)據(jù),也就是說,當(dāng)某數(shù)據(jù)對象屬性發(fā)生
    發(fā)表于 12-08 10:01

    分布式系統(tǒng)硬件資源池原理和接入實踐

    無中心對稱的分布式硬件外設(shè)管理系統(tǒng)。同時,分布式硬件框架定義了外設(shè)熱插拔,虛擬硬件保活等機(jī)制,保證業(yè)務(wù)可靠性。在運行時,各個硬件外設(shè)的業(yè)務(wù)運行于獨立進(jìn)程中,在進(jìn)程層面保證不同硬件的
    發(fā)表于 12-06 10:02

    如何實現(xiàn)Redis分布式

    Redis是開源的內(nèi)存數(shù)據(jù)存儲系統(tǒng),可用于高速讀寫操作。在分布式系統(tǒng)中,為了保證數(shù)據(jù)的致性和避免競態(tài)條件,常常需要使用分布式鎖來對共享
    的頭像 發(fā)表于 12-04 11:24 ?664次閱讀

    redis分布式鎖三方法

    Redis是種高性能的分布式緩存和鍵值存儲系統(tǒng),它提供了種可靠的分布式鎖解決方案。在分布式系統(tǒng)中,由于多個節(jié)點之間的并發(fā)訪問,需要使用
    的頭像 發(fā)表于 12-04 11:22 ?1405次閱讀

    redis分布式鎖的應(yīng)用場景有哪些

    系統(tǒng)中,多個節(jié)點可能同時訪問共享資源,例如數(shù)據(jù)庫、文件系統(tǒng)等。使用Redis分布式鎖可以保證在同時刻只有節(jié)點能夠訪問該資源,避免了并發(fā)沖突問題,確保數(shù)據(jù)的
    的頭像 發(fā)表于 12-04 11:21 ?1395次閱讀

    zookeeper分布式原理

    Zookeeper是開源的分布式協(xié)調(diào)服務(wù),可以用于構(gòu)建高可用、高性能的分布式系統(tǒng)。它提供了
    的頭像 發(fā)表于 12-03 16:33 ?621次閱讀

    分布式通信是什么 分布式網(wǎng)絡(luò)搭建

    智能機(jī)器人的功能繁多,全都放在計算機(jī)里,經(jīng)常會遇到計算能力不夠、處理出現(xiàn)卡頓等情況,如果可以將這些任務(wù)拆解,分配到多個計算機(jī)中運行豈不是可以減輕壓力? 這就是分布式系統(tǒng),可以實現(xiàn)多計算平臺
    的頭像 發(fā)表于 11-27 15:49 ?750次閱讀
    <b class='flag-5'>分布式</b>通信是什么 <b class='flag-5'>分布式</b>網(wǎng)絡(luò)搭建