説明しますが、コードは私よりもうまく説明できます。
2 つの変数の値を取得しようとして
います。そのクラスで新しいオブジェクトを作成し、パケットから値を設定したメンバーを使用します。
それらにアクセスしようとするたびに、意味をなさないゼロを見つけます。
問題に関連するコードの重要な部分は次のとおりです
public class PacketHandler
{
.
. dots means unrelated long code
.
public PacketHandler()
{
}
public ushort actualX { get; set; }
public ushort actualY { get; set; }
.
.
.
case 10010:
{
if (BitConverter.ToUInt16(data, 8) == 1002)
{
actualX = BitConverter.ToUInt16(data, 24);
actualY = BitConverter.ToUInt16(data, 26);
}
break;
そして、これが私が値を取得しようとしている他のクラスです
public class ClientBase
{
GameUser role2;
PacketHandler ph = new PacketHandler(); <<<<<<<<
public ClientBase(GameUser role)
{
role2 = role;
Thread T = new Thread(HuntThread) { Name = "Hunt Thread" };
T.Start(this);
Console.WriteLine("with name : " +T.Name + " with execution context : "+T.ExecutionContext +" with state : "+ T.IsAlive + " with id : " + T.ManagedThreadId);
T.Join();
}
Monster GetNextkill()
{
Monster CurrentTarget = null;
foreach (KeyValuePair<uint, Monster> Pair in Dictionary.Clone(Dictionary.Monsters))
{
CurrentTarget = Pair.Value;
}
return CurrentTarget;
}
public void HuntThread(object Sender)
{
try
{
ClientBase Client = Sender as ClientBase;
while (true)
{
Monster Target = GetNextkill();
if (Target != null)
{
Thread.Sleep(1000);
ProxyParadise.Network.Packets.PacketStructure ps = new ProxyParadise.Network.Packets.PacketStructure();
ps.__Packet10010(Target.X, Target.Y, role2, "normal", "server", ph.actualX, ph.actualY); <<<<< i get zeros at the ph.actualX/Y
Thread.Sleep(1000);
ps.__Packet10010(Target.X, Target.Y, role2, "sdasdsa", "client", role2.X, role2.Y);
Thread.Sleep(1000);
ps.__Packet1022NONEXP(Target.UID, Target.X , Target.Y, role2);
Dictionary.Monsters.SafeRemove(Target.UID);
ばかげているように聞こえる場合はご容赦ください。より明確にするために、新しいスレッドでクラスを介してデータを適切に転送する方法が必要です。
理解を深めるために、この例に適用してみてください。
素敵な一日を