Character select-ben a karakter pozíciója

Indította udvatt108, 2017-11-19, 11:29:47

Sziasztok.

Valaki nem tudja véletlen, hogy hogyan tudom beazonosítani, hogy hol helyezkedik el a karakter választóban a karakterem, pontos pozícióban? Úgy értem, hogy ha változik a képernyő felbontás akkor is ahhoz mérten szeretném a karater pozicióját lekérni.

Pythonban szeretném az X és Y poziciókat.
Nem tudom lekérni a GetLocalPositionnal, mert az nem python board elem, van rá valami mód?

IntroSelect.py-ben ezzel a kóddal helyezi el a karaktert:
screenWidth = wndMgr.GetScreenWidth()
screenHeight = wndMgr.GetScreenHeight()
newScreenWidth = float(screenWidth - 340)
newScreenHeight = float(screenHeight)

grp.SetViewport(340.0/screenWidth, 0.0, newScreenWidth/screenWidth, newScreenHeight/screenHeight)

app.SetCenterPosition(0.0, 0.0, 0.0)
app.SetCamera(1550.0, 15.0, 180.0, 95.0)
grp.SetPerspective(13.0, newScreenWidth/newScreenHeight, 1000.0, 3000.0)
Egy programozási nyelv akkor alacsony szintű, ha arra kényszeríti az embert, hogy az érdektelen dolgokra is odafigyeljen.


2017-11-19, 12:15:51 #2 Utolsó szerkesztés: 2017-11-19, 14:40:41 Szerző: udvatt108
Szóval a SetCamera pozicionálja a karakter?
De ebből felbontás dinamikusan hogy tudok konkrét pixel x,y pozíció értéket kiszedni?

Nézelődök hátha valami megoldás van rá, matematikai szempontból, vissza fejteni.


Üzenet összefésülés: 2017-11-19, 14:40:41

Ebből nem lehet kiszedni, nem befolyásolja a pozicionálást hanem csak méretezi, forgatja a képernyőn a karakter
Egy programozási nyelv akkor alacsony szintű, ha arra kényszeríti az embert, hogy az érdektelen dolgokra is odafigyeljen.

Ha láttál már teleport hacket akkor tudnád melyik kód felel érte ;D
[spoiler]chr.SetPixelPosition(int(x), int(y), 30)[/spoiler]

De én nem set-elni szeretném, hanem get-elni, azaz kikérni a pozíciót...
Egy programozási nyelv akkor alacsony szintű, ha arra kényszeríti az embert, hogy az érdektelen dolgokra is odafigyeljen.

Nincs get erre, de am nem nehéz beleírni 1 új sorba h elmentse ezeket a koordinátákat :-X :o
Vagy írsz 1 get metódust indító forrásban és tudsz getelni.

Valami módon akkor is el helyezi a karaktert a választóban hogy ott legyen ahol van. Valahol valahogy...
Egy programozási nyelv akkor alacsony szintű, ha arra kényszeríti az embert, hogy az érdektelen dolgokra is odafigyeljen.

Igen azzal a settel, előtte meg szépen kiszámolja az X és Y-t.
distance = 50.0
rotRadian = self.curRotation[i] * (math.pi*2) / 360.0
x = distance*math.sin(rotRadian) + distance*math.cos(rotRadian)
y = distance*math.cos(rotRadian) - distance*math.sin(rotRadian)

Haver te már megint nem teljesen értesz.

Egyrészt nem a forgatás pozícióját akarom lekérni, mivel te az előbbi kódot a karakter rotRadian forgatásából idézted, aminek semmi köze a screen object elhelyezéshez. Másrészt nekem nincs benne forgatás mint a régi kliensekben. Jobbra-balra és egyszerre egy karaktert mutat. Remélem nem bántottalak meg a felvilágosítással.
Egy programozási nyelv akkor alacsony szintű, ha arra kényszeríti az embert, hogy az érdektelen dolgokra is odafigyeljen.

Te nem érted a dolgot...
Igen az a forgatás valóban, de abban bennevan a vég/kezdőpozíció ahol megáll a karakter :o :o :o
Medzsik

De fogadjunk, hogy nincs hatással rá...

Mivel nekem mint már írtam nincs ilyen a kódomban. Mivel el lett távolítva a forgatás.

def OnUpdate(self):
chr.Update()

localtime = localtime = time.strftime("[%H:%M:%S]")
self.SzerverTime.SetText(localtime)

for i in xrange(4):
self.curGauge[i] += (self.destGauge[i] - self.curGauge[i]) / 10.0
if abs(self.curGauge[i] - self.destGauge[i]) < 0.005:
self.curGauge[i] = self.destGauge[i]
self.GaugeList[i].SetPercentage(self.curGauge[i], 1.0)

for i in xrange(self.SLOT_COUNT):

if False == chr.HasInstance(i):
continue

chr.SelectInstance(i)


#######################################################
if -1 != self.startIndex:

## Temporary
## BackGroundLoading이 지원 될때까지 임시로..
if app.GetTime() - self.startReservingTime > 3.0:
if False == self.openLoadingFlag:
chrSlot=self.stream.GetCharacterSlot()
net.DirectEnter(chrSlot)
self.openLoadingFlag = True

playTime=net.GetAccountCharacterSlotDataInteger(self.slot, net.ACCOUNT_CHARACTER_SLOT_PLAYTIME)

import player
player.SetPlayTime(playTime)
import chat
chat.Clear() ## 들어갈때 Chat 을 초기화. 임시 Pos.
## Temporary
#######################################################
Egy programozási nyelv akkor alacsony szintű, ha arra kényszeríti az embert, hogy az érdektelen dolgokra is odafigyeljen.

Create
...
SCRIPT_SetPixelPosition(float(c_rkCreateData.m_lPosX), float(c_rkCreateData.m_lPosY));
...

Köszi pati hogy próbáltál segíteni!

Végül nem tudtam kiszedni a pozíciót, így idáig matematikára hagyatkozva számolgattam, aztán az előbb össze jött egy képlet ami pár rész adattal, mint például a képernyő aktuális méretei és a karakter szélessége - magassága, valamint a képernyő scale értéke megadta a kívánt eredményt.

Egy programozási nyelv akkor alacsony szintű, ha arra kényszeríti az embert, hogy az érdektelen dolgokra is odafigyeljen.