MapControl に GraphicTracker を使用してシンボルを移動するサンプルです。ほんとはアドルでやりたかったんだけど Ys PC-9801 版な画像が見つからなかったので Sa・Ga おとこ でやってみました。しかも移動はドラクエⅠ風です(前しか向きません)。
残念ながら戦闘モードには入りません。そのため、「かみはばらばらになった」も再現できません。あくまでもお昼休みに作ったサンプルです。
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using ESRI.ArcGIS.Carto; using ESRI.ArcGIS.Geometry; using ESRI.ArcGIS.Display; using ESRI.ArcGIS.EngineCore; namespace MappingApplication_CS { public partial class Form1 : Form { double g_X; double g_Y; IGraphicTracker g_pGraphicTracker; IGraphicTrackerSymbol g_pGraphicTrackerSymbol1; IGraphicTrackerSymbol g_pGraphicTrackerSymbol2; int g_ID; bool g_Flag; public Form1() { InitializeComponent(); //GraphicTrackerの初期化 g_pGraphicTracker = new GraphicTrackerClass(); g_pGraphicTracker.Initialize(axMapControl1.Map as IBasicMap); string path = @".\saga.png"; string path2 = @".\saga2.png"; g_pGraphicTrackerSymbol1 = g_pGraphicTracker.CreateSymbolFromPath(path, path); g_pGraphicTrackerSymbol2 = g_pGraphicTracker.CreateSymbolFromPath(path2, path2); IPoint pPoint = new PointClass(); pPoint.PutCoords(0, 0); g_X = 1278000; g_Y = 341000; g_ID = g_pGraphicTracker.Add(pPoint as IGeometry, g_pGraphicTrackerSymbol1); g_pGraphicTracker.SetOrientationMode(g_ID, esriGTOrientation.esriGTOrientationFixed); //Timerイベント Timer timer = new Timer(); timer.Interval = 1000; timer.Tick += new EventHandler(timer1_Tick); timer.Start(); } //現在のマウスカーソル位置の座標をステータスバーに表示する private void axMapControl1_OnMouseMove(object sender, ESRI.ArcGIS.Controls.IMapControlEvents2_OnMouseMoveEvent e) { string x = System.Convert.ToString(e.mapX); string y = System.Convert.ToString(e.mapY); toolStripStatusLabel1.Text = "X: " + x + " " + "Y: " + y; } //タイマー イベント ハンドラ private void timer1_Tick(object sender, EventArgs e) { if (g_Flag == true) { g_pGraphicTracker.SetSymbol(0, g_pGraphicTrackerSymbol1); g_Flag = !g_Flag; } else { g_pGraphicTracker.SetSymbol(0, g_pGraphicTrackerSymbol2); g_Flag = !g_Flag; } g_pGraphicTracker.MoveTo(g_ID, g_X, g_Y, 0.0); } private void axMapControl1_OnKeyDown(object sender, ESRI.ArcGIS.Controls.IMapControlEvents2_OnKeyDownEvent e) { switch (e.keyCode) { //8キー case (int)104: g_Y += 50; break; //2キー case (int)98: g_Y -= 50; break; //4キー case (int)100: g_X -= 50; break; //6キー case (int)102: g_X += 50; break; } } } }