コードで記述した 3D Object を回転させたいのですが、
// <--- ★エラ− の行で、未定義の識別子 というエラーメッセージがでます。
エラーを無くして Cubeをさせるにはどうすればいいですか。
詳しいかたがいらっしゃいましたら、ご指導の程よろしくお願い致します。
作成手順
ファイル
新規作成
FireMonkey デスクトップアプリケーション
HD FireMonkey アプリケーション
で作成。
フォームに ツールパレットから、Viewport3D,Light,LightMaterialSource,Button を配置します。
フォームをダブルクリックして、uses 節に FMX.Objects3D を手入力で追加します。
やりたい事
ツールパレットから Dummy,Cube を Form に配置せず、Dummy と Cube をコードで記述して、
フォームに配置したボタンをクリックすると、(Cubeの親はDummy)キューブ(Dummy) が、Y軸を中心にして回転する。
親子関係
Form1
|
+-Button1
|
+-Viewport3D1
|
+-Lighte1
|
+-LighteMaterialSource1
|
+-Dummy //<-- ツールパレットから配置ではなく、コードで記述する。
|
+-Cube //<-- ツールパレットから配置ではなく、コードで記述する。
Unit1.pas の内容
Unit1.pas //ここから
unit Unit1;
interface
uses
System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
FMX.Types, FMX.Graphics, FMX.Controls, FMX.Forms, FMX.Dialogs, FMX.StdCtrls,
FMX.Viewport3D,FMX.Objects3D,FMX.MaterialSources,FMX.Controls3D;
type
TForm1 = class(TForm)
Viewport3D1: TViewport3D;
Button1: TButton;
LightMaterialSource1: TLightMaterialSource;
Light1: TLight;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
{ private 宣言 }
public
{ public 宣言 }
end;
var
Form1: TForm1;
implementation
{$R *.fmx}
procedure TForm1.Button1Click(Sender: TObject);
begin
Img_Dummy := Img_Dummy.RotationAngle.Y + 90; // <--- ★エラ−
end;
procedure TForm1.FormCreate(Sender: TObject);
var
Img_Dummy : TDummy;
Img_Cube : TCube;
Img_Proxy : TProxyObject;
begin
Img_Dummy := TDummy.Create(nil);
Img_Dummy.Parent := Viewport3D1;
Img_Dummy.SetSize(3, 3, 3);
Img_Dummy.Position.Point := Point3D(0, 0, 0);
Img_Dummy.RotationAngle.Y := 50;
Img_Cube := TCube.Create(nil);
Img_Cube.Parent := Img_Dummy;
TCube(Img_Cube).MaterialSource := LightMaterialSource1;
Img_Cube.SetSize(3, 3, 3);
Img_Cube.Position.Point := Point3D(0, 0, 0);
end;
end.
Unit1.pas //ここまで
使用環境
Delphi XE5 Pro Update2
Win7 Pro 64bit SP1
詳しくはないのですが、
procedure TForm1.FormCreate(Sender: TObject);
var
Img_Dummy : TDummy; // <--- これを
type
TForm1 = class(TForm)
Viewport3D1: TViewport3D;
Button1: TButton;
LightMaterialSource1: TLightMaterialSource;
Light1: TLight;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
{ private 宣言 }
Img_Dummy : TDummy; // <--- ここに移動
public
{ public 宣言 }
end;
で、どうですか?
教えて頂いたとおりにして見たのですが、
[dcc32 エラー] Unit1.pas(44): E2010 'TDummy' と 'Extended' には互換性がありません
というエラーになりました。
> Img_Dummy := Img_Dummy.RotationAngle.Y + 90;
Img_Dummy に代入しようとしているからかもしれません。
解決しました。
ご指導して頂いたとおりに、Img_Dummy : TDummy; を
private
Img_Dummy : TDummy;
に移動して、ボタン(Button1Click)に記述するコードを下記のように
変更したら意図する動作を確認する事が出来ました。
igy さん ご指導ありがとうございました。
procedure TForm1.Button1Click(Sender: TObject);
begin
// Img_Dummy := Img_Dummy.RotationAngle.Y + 90; // NG <-- 90だと動いているか分からないので45に変更
Img_Dummy.RotationAngle.Y := Img_Dummy.RotationAngle.Y + 45; // OK
end;
ツイート | ![]() |