原始翎風CLIENT8位 (10) tscenc的學習

D7mir發表於2024-05-07

IntroScn.pas

嗟夫
DELPHI 輸入法相關知識
凡是視窗類 都有TImeMode 這是個集合 其中包含有:

TImeMode = (imDisable, imClose, imOpen, imDontCare,
imSAlpha, imAlpha, imHira, imSKata, imKata,
imChinese, imSHanguel, imHanguel);

指定 imDisable 的話 IME 變得無效。既無法作使用了 IME 的輸入,即使使用者的操作也無法
讓 IME 有效。

指定 imClose 的話 IME 變得無效。和 imDisable 不同,能用使用者的操作讓 IME 有效。

指定 imOpen 的話 IME 變得有效。

指定 imDontCare 的話 IME 的有效 /無效的情況,繼承之前的情況。根據使用者的操作而讓
IME 有效之類等等能做。在日文輸入方面,,是讓使用者自由地輸入半形 /全形文字的情況的一
般的模式。

指定 imSAlpha 的話 IME 變得有效,成為半形拉丁字母輸入模式。

指定 imAlpha 的話 IME 變得有效,成為全形拉丁字母輸入模式。

指定 imHira 的話 IME 變得有效,成為平假名輸入模式。

指定 imSKata 的話 IME 變得有效,成為半形片假名輸入模式。

指定 imKata 的話 IME 變得有效,成為全形片假名輸入模式。

指定 imChinese 的話 IME 變得有效,成為接受 2 位元中文輸入的模式。無法在日文環境能
使用。

指定 imSHanguel 的話 IME 變得有效,成為接受 1 位元韓文輸入的模式。無法在日文環境能
使用。

指定 imHanguel 的話 IME 變得有效,成為接受 2 位元韓文輸入的模式。無法在日文環境能
使用。

標籤: delphi


7 0 1
6 2
5 4 3

//左手

0+8=8-2

1+8=9-2

2+8=10 -10

3+8=11-10

4+8=12-10

5+8=13-10

6+8=14-10

7+8=15-10

//右手

0+2=2
1+2=3
2+2=4
3+2=5
4+2=6
5+2=7
6+2=8 - 8
7+2=9 - 8

標籤: 遊戲心得

嗟夫
APP魔法順序筆記
以冰咆哮為例:

首先是客戶端:
1、TfrmMain.ProcessKeyMessages 裡面
  1.1、nMagID := GetMagIDByKey(nKey); 根據按鍵取得魔法ID
  1.2、呼叫UseMagic()函式來製造這個魔法

2、在UseMagic() 函式里面
  2.1、判斷MP是否足夠
  2.2、判斷要生成魔法的座標位置等資訊
  2.3、g_MySelf.SendMsg()傳送CM_SPELL資訊

3、在TActor.ReadyAction裡面攔截到CM_SPELL資訊
  3.1、將資訊的索引 msg.Ident改為 SM_SPELL 注意這裡收到這個資訊包後並沒有刪除
UseMagic!就在同一個函式中 執行到下面的 SM_SPELL 會繼續處理這個資訊包

  3.3、 執行到 SM_SPELL段 取得UseMagic裡面的內容 將它放入 m_CurMagic 然後刪除掉
這個UseMagic

4、在THumActor.CalcActorFrame

此刻才到引擎:

1、再然後引擎搜尋周圍的玩家 除了自己外 都傳送 SM_SPELL給對方 因為自己已經執行過動

裡面定義的類,全部沒有屬性
嗟夫
武器的最大攻擊與最小攻擊的演算法
比如 最小值 17
最大值 29

計算方式是

17+ 取隨機數(29-17)=最終值!

嗟夫
APPLE原始碼從DELPHI2007升級DELPHIDX4的總結
今天我成功的將APPLE原始碼的HGEDELPHI控制元件從DELPHI2007平臺升級到DELPHIXE4的一些記錄:

1.1:PAK資原始檔的資源頭段位元組大小不對 原先的是64 而XE4下是87

   這個是因為char 的緣故,在XE4下 CHAR 不再是AnsiChar 而是 wideChar 這樣導致檔案
頭大小不對。

1.2:ZLIB的引數變化 XE4下的ZLIB已經有所改動,導致原來的指標轉換出錯。

已完成對PAK的處理

2.1:HGEDELPHI控制元件的D3DX81ab.dll因為是事先轉為位元組然後記憶體載入的,而這個記憶體載入DLL
的函式在XE4下不修復是無法使用的。

一種辦法是處理好記憶體載入,另一種辦法是去掉記憶體載入 直接將HGE換成DX9。我選擇了第二
種辦法。

  已解決

TScene = class 這個從tobject開始
裡面只多了一個SceneType: TSceneType;
而TSceneType 定義
TSceneType = (stIntro, stLogin, stSelectCountry, stSelectChr, stNewChr,
stLoading,stLoginNotice, stPlayGame);
然後是 Create(scenetype: TSceneType)
裡面就是個SceneType,就沒有了。
應該是有個預設的TOBJECT.CREATE的。
其它的都是動態方法,實際可以改成虛方法。
初始化
procedure Initialize; dynamic;
結束化
procedure Finalize; dynamic;
開啟場景
procedure OpenScene; dynamic;
關閉場景
procedure CloseScene; dynamic;
正開啟場景
procedure OpeningScene; dynamic;
鍵盤輸入
procedure KeyPress(var Key: Char); dynamic;
procedure KeyDown(var Key: Word; Shift: TShiftState); dynamic;
滑鼠輸入
procedure MouseMove(Shift: TShiftState; X, Y: Integer); dynamic;
procedure MouseDown(Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
dynamic;
播放場景
procedure PlayScene(MSurface: TDirectDrawSurface); dynamic;

TIntroScene = class(TScene)繼承於TScene
裡面inherited Create(stIntro); 設定了SceneType

Destroy也是inherited。對TScene)的繼承

constructor Create;
重寫了這個幾個,但實際裡面都是空的???
destructor Destroy; override;
procedure OpenScene; override;
procedure CloseScene; override;
procedure PlayScene(MSurface: TDirectDrawSurface); override;

TLoginScene = class(TScene)
裡面終於有點內容了
對應登陸場景,裡面
各種輸入框,TEdit

對使用者的輸入定義的記錄
m_NewIdRetryUE: TUserEntry;
m_NewIdRetryAdd: TUserEntryAdd;


裡面對應了4種情況
登陸框
lsLogin: focus := 10;
新建帳號,新建帳號重試
lsNewIdRetry, lsNewId: focus := 11;
更改密
lsChgpw: focus := 12;

對應了FSate 裡面的3種皮膚框
DLogIn
DNewAccount
DChgPw

他們需要結合在以前使用。
ChangeLoginState這個來改變這4種情況

對 皮膚框上的點選事件,呼叫了這裡的處理
比如說DLogIn框上的 新建帳號點選事件,呼叫了NewClick
所以得結合起來看

相關文章