Ask Your Question
0

db 오브젝트 삭제에 관해 문의드립니다.

asked 2019-12-10 11:06:29 +0900

arksh gravatar image

안녕하세요.

유저가 소유한 아이템(인벤토리)중 여러개의 아이템을 한번에 삭제하려고 합니다.

인벤토리는 Foreign으로 생성하였습니다.

삭제할 아이템의 오브젝트 id들을 벡터로 만들어서 fetch 하고,

루프를 순환하면서 해당 오브젝트들을 Delete하면,

계정에 선언한 인벤토리의 인덱스도 삭제해주어야 하나요??

메뉴얼에는 슬롯개수를 유지하기 위해 setat으로 null 해주라고 설명이 되어있는데,

슬롯 유지할 필요가 없고 슬롯을 지우고 싶습니다.

eraseat을 사용하여서 지워야 한다면, 삭제할 아이템들을 백터로 Fetch하지 않고,

전체를 받아서 순환하면서 지워야 하는건가요?

edit retag flag offensive close merge delete

1 answer

Sort by » oldest newest most voted
0

answered 2019-12-10 11:54:14 +0900

Seunghyun gravatar image

안녕하세요.

아이펀팩토리입니다.

먼저 슬롯을 유지할 필요가 없을경우에도 가급적 NULL 로 두고 나중에 여기에 아이템을 추가하는 것이 좋습니다. Array 의 경우 중간 Index 를 삭제할 경우 뒤에 있는 Index 들을 모두 한 칸씩 앞당기는데 이 처리가 가볍지 않기 때문입니다.

Foreign 으로 정의되어 있고, 아직 인벤토리를 Fetch 하지 않았다면 1. GetAt() 으로 Object ID 를 읽어서 Vector 에 저장 2. EraseAt() 으로 슬롯 삭제 3. 1-2 를 반복 후 마지막에 Vector 를 넘겨 Fetch 후 루프를 돌며 Delete 를 하시면 됩니다.

감사합니다.

edit flag offensive delete link more

Comments

답변 감사드립니다.

인벤토리를 삭제하지 않고, NULL로 두고 사용하려면..

Foreign으로 설정된 인벤토리에는 Fetch 이전에 SetAt(index, Object::KNullId)하면 되는건가요?

후에 FindFirstEmptySlot을 하면 위 처럼 처리된 슬롯의 인덱스값을 얻을 수 있는건가요?

arksh gravatar imagearksh ( 2019-12-10 14:45:24 +0900 )edit

Foreign 이라면 SetAt(index, Object::kNullId); 로 NULL 로 설정할 수 있습니다. 그리고 말씀하신 것처럼 FindFirstEmptySlot() 으로 값이 NULL 인 Index 를 찾을 수 있습니다.

주의하실 점은 NULL 로 SetAt() 하더라도, 원래 있던 Object 는 GetAt() 으로 먼저 얻어와서 Delete() 를 호출해주셔야 삭제됩니다.

Seunghyun gravatar imageSeunghyun ( 2019-12-10 14:50:07 +0900 )edit

네. 감사합니다. Foreign에 대해 어렴풋이 생각하던게 이제 이해되었습니다.

arksh gravatar imagearksh ( 2019-12-10 14:52:56 +0900 )edit

Your Answer

Please start posting anonymously - your entry will be published after you log in or create a new account.

Add Answer

Question Tools

1 follower

Stats

Asked: 2019-12-10 11:06:29 +0900

Seen: 25 times

Last updated: Dec 10 '19