台灣最大程式設計社群網站
線上人數
1263
 
會員總數:240849
討論主題:186637
歡迎您免費加入會員
討論區列表 >> C/C++ >> 函式間求值問題
[ 變換順序 ]  
[我要回覆]
1
回應主題 加入我的關注話題 檢舉此篇討論 將提問者加入個人黑名單
函式間求值問題
價值 : 5 QP  點閱數:192 回應數:7

樓主

Sam Sam Brite
門外漢
0 1
14 3
發送站內信


void A::onEnterWorld_Implementation(const SmileEventData* pEventData){
const SmileEventData_onEnterWorld* pData = Cast<SmileEventData_onEnterWorld>(pEventData);

FRotator Rot(0.f, 0.f, 0.f);
FTransform SpawnTransform(Rot, pData->position);
...
}

void A::fly_Implementation(const SmileEventData* pEventData)
{
FRotator Rot(0.f, 0.f, 0.f);
FTransform SpawnTransform(Rot, pData->position);
}

如何讓 fly函式取得onEnterWorld函式的 pData ,pData->position值
謝謝

搜尋相關Tags的文章: [ 函式求值 ] ,
本篇文章發表於2017-08-27 01:29
別忘捐VP感謝幫助你的人 新手會員瞧一瞧
1樓
不錯的參考

小魚
檢舉此回應
既然都在同一個class裡面,
你就在class中定義一個SmileEventData_onEnterWorld* pData
然後先執行onEnterWorld_Implementation函式,
將pData賦予值pData = Cast<SmileEventData_onEnterWorld>(pEventData);
之後再執行fly_Implementation,就可以取到pData的值了啊。
本篇文章回覆於2017-08-27 08:33
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
2樓
作者回應

Sam Sam Brite
檢舉此回應
" pData賦予值pData "

這邊不太懂 , 有完整程式碼?
本篇文章回覆於2017-08-27 08:59
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
3樓
最有價值解答

小魚
檢舉此回應
我不是寫在上面了嗎?
後面從pData開始那一串就是程式碼,
將pData賦予值: pData = Cast<SmileEventData_onEnterWorld>(pEventData);
我是照你給的程式碼來改的。
本篇文章回覆於2017-08-27 09:27
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
4樓
回應

小魚
檢舉此回應
這有點像 全域變數 跟 區域變數 的問題,你可能要再加強這個部分。
本篇文章回覆於2017-08-27 11:47
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
5樓
作者回應

Sam Sam Brite
檢舉此回應
剛DEBUG發現 不是DATA問題

是要讓fly取得world的
FTransform SpawnTransform(Rot, pData->position);

fly自訂義會造成2邊無窮迴圈 , 但是FTransform SpawnTransform(Rot, pData->position); 沒法用全域
本篇文章回覆於2017-08-27 20:41
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
6樓
回應

小魚
檢舉此回應
因為你提供的程式碼很少,
基本上也不知道SpawnTransform是要做什麼的,
不過在這邊的全域變數應該說是定義成class的變數,
因為看你onEnterWorld_Implementation函式中pData只有在函式裡才會出現,
函式結束記憶體就會被釋放掉了,
不過剛才又看了一下,
如果你需要pData直接加上這一行

const SmileEventData_onEnterWorld* pData = Cast<SmileEventData_onEnterWorld>(pEventData);

就好了啊,這才是資料來源吧,重點不是怎麼取得onEnterWorld_Implementation的pData。
本篇文章回覆於2017-08-28 01:26
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
7樓
作者回應

Sam Sam Brite
檢舉此回應
UE4 上的C++
剛發現是邏輯判斷上的錯誤導致迴圈
所以放哪都沒關係

公式程式碼
FTransform SpawnTransform(Rotation, Origin);
auto MyDeferredActor = Cast<ADeferredActor>(UGameplayStatics::BeginDeferredActorSpawnFromClass(this, DeferredActorClass, SpawnTransform));
if (MyDeferredActor != nullptr)
{
MyDeferredActor->Init(ShootDir);

UGameplayStatics::FinishSpawningActor(MyDeferredActor, SpawnTransform);
}
本篇文章回覆於2017-08-29 01:47
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
[ 變換順序 ]   
1

回覆
如要回應,請先登入.