1 :
デフォルトの名無しさん :
02/04/24 22:29 Delphiでアクションゲームが作りたいんです。 初心者でもわかるように1から説明してください。 ネタじゃないです!!
2
ネタつくりと素材つくり(音楽 絵)頑張れ
何故、お前なんかにわざわざ手間をかけて、1 から説明しなければ ならないんだい?
5 :
デフォルトの名無しさん :02/04/24 22:39
>>4 おながいしますよ。どうせ暇なんでしょ。
4000も出して本買ったけど、ゲームに結びつくようなことは何もかかれてなかった。
ダイレクトXをダウンロードしる。 パソコンに合わない可能性も高いが。
7 :
デフォルトの名無しさん :02/04/24 22:40
とりあえず、ファミコンのマリオみたいなゲーム作りたいです。
たしか「DelphiでWindowsゲームを作ろう」ってそのものずばりっぽい 本があったと思う。 それ買えば?
>>7 じゃあまずはAボタン押したら■がジャンプするプログラムでも作っとけ。
よし。じゃまず、方眼紙買ってこい。
ゲーム製作技術板へ行って下さい。
13 :
デフォルトの名無しさん :02/04/24 22:44
>>10 そういう時はどのコンポーネントを使えばいいのですか?
∧,,∧ ,ミ;゚Д゚彡 ドット疲れますた。 ミ ∪ ミ〜,, ミ ∪ ∪
16 :
デフォルトの名無しさん :02/04/24 22:47
>>14 付いてますけど、どうすればいいかわからないです。
>>16 とりあえず、sageを覚えて、ゲーム作りは一旦あきらめて
Delphiの腕を磨いてきてください。
まずは2chの注意書きを読んでからにしてくれ。
Sage
フォームに ■ を描くプログラムからはじめたほうがよさそう
もうちょっと待ってて
/ ̄> 厨なニオイがするでござる > |゚U゚ヽ|/ / y⊂)〜 U〉 ⌒l /(__ノ ~U /""""""""""""""""
ズレタ・・・・鬱
ゲームを作る まずプログラムを勉強する(ゲームのゲの字も出てこない) 自分の作るゲームに必要そうな技術を勉強する(DirectXとか(むずい)) ゲームのネタを考える そのゲームに必要な素材を揃える(絵 音) やっとゲームのプログラムを作ろう。 くらいの流れでいこう。道のりは果てしなく長い 多分くじけるくらい長い。
糞なページよりDelphi→HSPにしろ
var ActionGame: TActionGame; begin ActionGame := TMyActionGame.Create; try ActionGame.Run; finally ActionGame.Free; end; end.
わから〜ん。 どうやったらジャンプするの?
だからHSPにしとけって
最悪マシンがハングした お前のせいだ
だれかヒントください ■をラベルとして貼り付けて、ボタンを押すとその座標が上に来るようにしたいんですけど、 どうすればいいのかわかりません(>_<)
ジャンプした瞬間から、重力と空気抵抗を考慮して微分方程式をパリパリ計算 させる。そして決定した座標に■描画。 とりあえず「ルンゲクッタ法」で検索かけてみ
ルンタッタ
うむ
>>38 マジでそんなの考えなきゃいけないんですか?
難しいなぁ。勉強します。
気楽に行こうぜ ルンタッタ
44 :
デフォルトの名無しさん :02/04/25 01:53
DelphiX
/⌒\ /\
/'⌒'ヽ \ ./\ |
(●.●) )/ |: |
>冊/ ./ |: /
/⌒ ミミ \ 〆
/ / |::|λ| |
|√7ミ |::| ト、 |
|:/ V_ハ |
/| i | ∧|∧
и .i N /⌒ ヽ ) ←
>>1 λヘ、| i .NV | | |
V\W ( 、 ∪
|| |
∪∪
DirectX使えば三次元アクションゲームが作れるんじゃにゃいにょ〜
>>41 ドット座標系だから、シンプルな二次関数でいい。
放物線っていうだろ? 頂点の手前でだんだん遅くなる。
procedure TForm1.Button1Click(Sender: TObject); const n = 300; var i: Integer; begin for i := -n to n do Canvas.LineTo(i+n,Height-Round(n-i*i/n)); end; とりあえずマターリと放物線・・・
デコジャンプなら直線で良いよ。
もうネタのか?
>>37 ボタンというのはキーボードのキーのことでいいのかな?
だったらOnKeyDownイベント.
たとえば「[↑]キーが押されたら…」という場合は
if Key = VK_UP then
というふうに書くよ.
(ほかのキーはDelphiのヘルプで『仮想キーコード』をキーワードに検索してみて.)
ただしラベルにはこのイベントはないからほかの手を考えて.
上か下かはラベルのTopプロパティで決まるよ.
この値をちょっとずつ増やしたり減らしたりすれば上下に動くよ.
どっちに動くかは実際にやってみて確かめてみてくれ.
相手をするから構ってくんが増えるのがわからないの?
>>53 ありがとうございます。参考になります。
いまだにジャンプができません(汗
皆さんの意見を参考に頑張ります。
>>52 ごめんなさい。学校があったもんですから。
58 :
デフォルトの名無しさん :02/04/25 20:30
age
↑のは僕です。
>1
もうちょっとツールに慣れてから来いや。
>>37 の質問はゲーム云々以前の問題だろ。
−−−−−−−−1がDelphi慣れするまで放置−−−−−−−−
62 :
デフォルトの名無しさん :02/04/25 23:00
63 :
デフォルトの名無しさん :02/04/25 23:42
ddddインスコできない。どうすりゃいいの?
結局今日もジャンプさせることが出来なかった。頭悪いな、オレ。 だけど、諦めません。ぜってーマリオ作るから。 明日も学校なので寝ます。おやすみなさい。
高校レベルの物理くらい勉強すれば? これを知ってないとお話にならない。
頭悪い上にあきらめが悪いなんて相当たちが悪いねw
Y=Y。*s-1/2(9.8*g*s*s) X=X。*s Y。、X。はジャンプするときの上方向、横方向の初速度 Y、Xはジャンプした物体の位置 上の式から座標を計算して…ってこれ位中学で習わなかったっけ?
>>67 今リアル工房3年。
2年ではじめて物体の運動習ったとこだよ。
中学の理科では力くらいしか習わなかったなぁ。
中学では数学で放物線=物体の落下運動ってチラッと聞いたくらい。
むろん重力加速度なんて知らなかったし。
加速度なんて消防の頃N88BASIC触ってたら 自然に発見したぞ。
>>69 だよな。
学校で習う前に法則とか知ってたよな。
具体的な数値は違うけど。
interface // ラベルを1個貼り付けて そのラベルを動かすコード uses Windows, Messages, SysUtils,Classes, Graphics, Controls, Forms, StdCtrls; type TMoveItem= record x,y,vx,vy,ax,ay:double; obj:TObject; end; TForm1 = class(TForm) Label1: TLabel; procedure FormCreate(Sender: TObject); private oldTime:DWORD; items:array [0..0] of TMoveItem; procedure Idle(Sender: TObject; var Done: Boolean); public end; var Form1: TForm1; implementation {$R *.dfm} var Clip:TRect; procedure ExecMoveItem(var items:TMoveItem;dt:double); begin with items do begin x:=x+vx*dt; y:=y+vy*dt; vx:=vx+ax*dt; vy:=vy+ay*dt; if (round(x)<Clip.Left ) and (vx<0) then vx:=-vx; if (round(x)>Clip.Right ) and (vx>0) then vx:=-vx; if (round(y)<Clip.Top ) and (vy<0) then vy:=-vy; if (round(y)>Clip.Bottom) and (vy>0) then vy:=-vy; if obj is TControl then with obj as TControl do begin Top:=Round(y);Left:=Round(x);end else //ここに他のアイテムの動きを増やしてゆく ; end; end; procedure TForm1.Idle(Sender: TObject; var Done: Boolean); var t:DWORD; dt:Double; i:Integer; begin t:=GetTickCount; dt:=(t-oldTime)/1000.0;oldTime:=t; if dt>0 then begin for i:=0 to High(items) do ExecMoveItem(Items[i],dt); end else Sleep(33); Done:= False; end; procedure TForm1.FormCreate(Sender: TObject); begin Application.OnIdle:=Idle; oldTime:=GetTickCount; Clip:=ClientRect; with items[0] do begin obj:=Label1; x:=Label1.Left; y:=Label1.Top; vx:=20; vy:=-13; ay:=9.8; ax:=0.001; end; // ちらつきを減らすなら DoubleBuffered:=True; end; end.
>>69-70 自分専用のPCもらったの工房1年。(;´Д`)
いちおう放物線を描いて物を飛ばすプログラム作ったけど
係数は1だったから不自然に思えたなぁ。
当時プログラムも覚えたてで
それでいっぱいいっぱいだったし。(;;;´Д`)
そしてなによりも
>>1 が加速度とかの類をハッケソできるか疑問。(w
俺にもこんな時期があったなぁ(懐 がんばれ、1
まだまだ( ゚Д゚)
うぅ、風邪引いてしまった(T_T)
保守上げ
>>65 プログラムなんてしてる暇あったら
勉強しろYO!
>>77 マリオが出来あがるまでは集中できないので勉強はしません。
delphiで作られた有名なアクションゲームってある?
80
>>1 ■に放物線を描かせるやりかたは
>>71 で判ったね?
次はキャラクタアクションかな アイデアはある?
>>1
>>1 マジで受験勉強すれ
物理数学英語(化学)の偏差値60にしてからプログラムの勉強しても遅くないはず
人生棒に振るなよ
85 :
デフォルトの名無しさん :02/04/29 20:34
大学受験のための勉強
>>84 マジっすか?今年高校に入学したばっかりなんですけど。
87 :
デフォルトの名無しさん :02/04/29 20:40
>>1 マジっす!!
って進学校だったら毎日勉強しないとついていけないけどなぁ・・・。
いや、俺は半分より上にいれば満足なんで。
受験勉強が必須かどうかはともかくも高校数学ぐらいはデフォで押さえる必要あり。
90 :
デフォルトの名無しさん :02/04/29 20:43
>>90 数学は県でトップですが、県自体レベルが低いんで…鬱
92 :
デフォルトの名無しさん :02/04/29 20:46
>>1 おお凄い!
頑張って東大に入ってからプログラムやりなさい
93 :
デフォルトの名無しさん :02/04/29 20:50
>>89 2Dゲーム(マリオ)くらいだったら
中学数学で対応できるけどね
>>92 凄くないですよ。都道府県別学力ランキングでビリ争いするような所ですから。
東大なんて120%ムリです。
95 :
デフォルトの名無しさん :02/04/29 20:51
96 :
デフォルトの名無しさん :02/04/29 20:55
>>93 ホントですか!?じゃぁ、相当バカですね、俺。
>>95 別に大学は何処でもいいです。東大出ても就職が難しい時代ですから。
>>96 違います。民放が2つしかないド田舎です。
どうでもいいが sage でやってくれ。
駄スレだから。
まあ
>>1 が頑張ってるから良スレになる予感はあるかもしれん。
HSP とか Python/SDL 使ってからでも遅くないと思うんだがなぁ。 HSP なら日本語ドキュメントもあるわけだし。
Ruby!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!/SDL を強く推奨します。
>>63 ヘルプの「FAQ&Tips」にある「インストール方法、サンプルについて」を読め
>>1 とりあえず、トリップつけてくれ。名前欄に"#英数字"
偽者気取ってても全然バレてないじゃん
DELPHI+DDDD で簡単にDIRECTX対応ゲーム作れるよ 2Dまでだけど(3Dだったら素直SDKで行ったほうがいい)
やっとジャンプできるようになりました。
まだ垂直ジャンプだけですけど(^_^;)
>>107 わかりました。トリップ付けます。
>>108 ddddはインストールはしてるんですけど、
まだ必要ないと思うので(というより使い方がわからない)もうちょっと普通に頑張ってみます。
>>110 高校でですか?
高校では2次関数をやってます。
>>1 いや、デルファイの勉強
データ型とかは解る?
intgerとかstringとか
>>112 それは本を買ったんでわかります。
全部は覚えてないんですけど。
procedureとかfunctionとかです。
>>116 i :=a(b.1)とかってするのですよね。いまいち使い方がわかりません。
>>1 procedureは手続きで
functionは関数って事はわかります?
関数の例 function add(a,b:integer) : integer; var c : integer; begin c := a + b; add := c end;
下の世話までしてくれそうなお人好しな奴隷がたくさんきてくれてよかったな
>>1
>>1 関数の作り方なんですけど
>>119 さんの関数の実装の仕方はわかりますか?
>>119 それはaddというInteger型の関数で、パラメータがInteger型のa、bというということですか?
それはどういう時に使うんでしょうか?
>>1 Form1のpublic節の中に
function add(a,b:integer) : integer;
とかいて
implementation節のどっかに
function form1.add(a,b:integer) : integer;
var c : integer;
begin
c := a + b;
add := c
end;
とかけば実装完了です。
>>119 標準Pascal準拠ではないが、result変数使った方がわかりやすいような気がするです。
つうか高1なら数学で関数とは何ぞや、って習ってない? f(x)=ax^2+bx+c とか。 あれと一緒だよん。
訂正 function form1.add(a,b:integer) : integer; ↓ function Tform1.add(a,b:integer) : integer;
あ、僕と同じような事考えてるバーヤな
>>1 さん発見。
じゃー僕も頑張ってみますか。。。
>>125 .128
実装方法はわかったんですけど、それはどういう時に使うものなんですか?
>>127 それは習いました。だけど、それと結びつかない…(´Д`;)
>>129 いっしょに頑張りましょう。
>>119 の関数は使い道ないですけど、実装するとこんな感じ!?
自分で関数作って、プログラム中で使ったりできる?
program cal(input,output);
var x,y : integer;
function add(a,b:integer) : integer;
var c:integer;
begin
c:=a + b;
add := c
end;
begin
write('x='); readln(x);
write('y='); readln(y);
write('x+y=',add(x,y) : 1)
end.
f(x)=ax^2+bx+c これをDel風に書くと、 function f(x:Integer):Integer; begin result := a*x*x+b*x+c; end; a,b,cは適当な整数で置き換えてね。 数学では例えば、 f(x)=3x^2-4x+5 と関数fが定義されてたら f(3)=20 ってなるでしょ。 それと同じで、a=3,b=-4,c=5 でPascalで上の関数を定義すれば、 var i: Integer; begin i := f(3); とやれば変数iに20が代入される。
フォーム上にボタンを置いて ダブルクリックするとボタンを押したときに動く関数が コードエディタにでてくるんで procedure TForm1.Button1Click(Sender: TObject); begin end; そこにButton1.caption := inttostr(add(1,2)); をbeginとend;の間に入れると procedure TForm1.Button1Click(Sender: TObject); begin Button1.caption := inttostr(add(1,2)); end; それをコンパイル&実行してみてください。
134書いたの僕です
>>132 なるほど。使い方がわかりました。
>>133 おお、とてもわかりやすい説明ありがとうございます。
もう一回書きます unit Unit1; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Button1: TButton; Label1: TLabel; procedure Button1Click(Sender: TObject); private { Private 宣言 } public { Public 宣言 } function add(a,b:integer) : integer; //ここでadd関数宣言 end; var Form1: TForm1; implementation {$R *.DFM} function TForm1.add(a,b:integer):integer var c : integer; begin c := a + b; result := c; end; procedure TForm1.Button1Click(Sender: TObject); begin Button1.caption := inttostr(add(1,2));//inttostrはint型のデータをstrings型に直す関数 end; end.
>>134 ボタンの文字がちゃんと"3"に変わりました。
ありがとうございます。疑問が解けました。
>>137 何度もありがとうございます。implementation節の中の
begin
c := a + b;
result := c;
end;
についてですが、
begin
add :=a+b
end;
と書いてはいけないのでしょうか?
add(x,y) の関数でXやYの値をユーザに設定させるにはどうやったら いいと思う?
>>1 さん
ええ、がんばりましょう。
とりあえず僕は
>>53 さんのレスを参考にLavelの■を上下左右に動かすことまではできたんで、
次はジャンプさせてみます。。。
>>139 add :=a+b
とかいてもイイんですが
最近はresultを使うのが一般的なようです。
cを使ったのは関数内のみで使えるローカル関数の
定義の仕方の参考になればと思いまして付けさせていただきました。
修正ローカル関数→ローカル変数 スマソ・・・
>>142 そうなんですか。わかりました。
何度もスミマセンでしたm(_ _)m
>>141 頑張ってください(´∀` )
147 :
デフォルトの名無しさん :02/04/30 00:51
ジャンプを放物線(二次関数) にしちゃうと現実的な動きになりすぎてつまらなくなりそう。 マリオだって完全な方物運動じゃないし
>>140 まぁ一例だが、Editをフォームにはっつけて、
a := StrToInt(Edit1.Text);
みたいな具合にやればOK。
StrToInt ってのは、その名の通り、文字列を整数に変換する関数。
ただし変換に失敗すると、初心者の恐れる例外が発生する。
間違えてもEditが空白のまま、または変な文字列が入ったまま
ボタンを押さないように。
149 :
デフォルトの名無しさん :02/04/30 00:56
>>146 関数と同様に構造体も理解しておいた方がいいと思う。
>>146 Pascal風に言うとレコードかな。
type // 型宣言
T性別=(男,女,中性); // これは列挙型
T人間=record // これがレコード型(構造体ともいう)
名前:String;
生年月日:TDateTime;
性別:T性別;
end;
あ、勿論日本語は使えません。
>>148 例外が怖かったら、StrToIntDef という逃げ道もありまっせ、ヒヒヒ。
ま、使い方はヘルプをみてくんな、もし。
つーかさ、関数もわかってないんだから構造体でけでなく相応勉強しないとだめだね って既出か
153 :
デフォルトの名無しさん :02/04/30 01:07
関数と構造体と条件分岐とポインタあたりまで 覚えてからゲームを作る事を考えたほうがいいと思う
>>153 んー、でもプログラミングに限らず、なにか物を作るときに
必要な技術を身に付けてから始めようとすると挫折しない?
とりあえず初めて、つまづいたらそれを解決する技術を身に
つけて…の方がいいでしょ。
頑張れ
>>1
何かdelphiの入門書一冊でも読んだ方が良いような気が…
こういうことですよね? interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Button1: TButton; Label1: TLabel; Label2: TLabel; procedure Button1Click(Sender: TObject); private { Private 宣言 } public { Public 宣言 } end; type TDateRec = record Year: Integer; Day: 1..31; end; var Form1: TForm1;var Record1, Record2: TDateRec; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); begin with Record1 do begin Year := 1904; Day := 16; label1.Caption := inttostr(year); label2.Caption := inttostr(day); end; end; end.
>>156 入門書は一応「Borland Dlphi6 オフィシャルコースウェア 基礎編」というのを買いました。
>>156 dlphi→delphiの間違いです。
>>157 よろしいです。
でも日時を記憶させるには、Delphi標準のTDateTime型(実際はただの実数型)
ってのがあるから、互換性のためにもそっちを使いましょう。
TDateTime型なら、Delphi付属の日時処理に関する多くの関数等が使えて便利
ですよー。2038年問題も無いし。
>>157 型宣言(type xxx=yyy;)や変数宣言(var xxx:yyy;)が連続する場合は、
2回目以降のtype,varは省略できますよ。
定数宣言(const xxx=yyy;)も然り。
>>160 あっ、そういえばそんなのありましたね。
ていうか2038年問題とかあるんですか。
>>161 そうなんですか。わかりました。今度から省略するようにします。
今日はもうダメです... タイマー使ってジャンプを実現しようとしたけど,使い方を忘れてる... ぅぅ,「はじめてのDelphi」をまた図書館から借りて来よう... でもスレの流れを見てるとタイマー使わなくても逝けてる?のかな... 皆さんありがとうございました.おやすみなさい... if スペースキー押す then for x := -5 to 5 do //0.5秒ごとに実行したい... begin y := x*x; if x < 0 then Label1.Top := 現在の縦座標 - y else Label1.Top := 現在の縦座標 + y; end;
165 :
デフォルトの名無しさん :02/04/30 02:45
>>164 タイマーは制度が悪いから
gettickcountかtimegettimeを使った方がいいよ
>>164 そういうふうに xの関数にしてしまうと、途中で動作を変更しようとした時に苦労するよ
xの関数ではなくて 差分方程式とかDDAとかの手法 つまり
>>71 のようにしないとさ
>>71 のソースから放物線を描く部分を抜き出すと
x:=x+vx*dt; y:=y+vy*dt;
vx:=vx+ax*dt; vy:=vy+ay*dt;
vx,vyが速度で ax,ayが加速度 加速度一定の条件で 繰り返し実行すると放物線を描く
>>165 が言ってるような精度のタイマーは必要ない。なぜならdtの精度は悪くても
これは線形方程式なので誤差はそれほど溜まらない為
ジャンプさせる時は
1、ボタンアクションでvyに数字を代入する=跳ね返ったような跳躍の仕方
2、ボタンを押してる間 xの位置が指定以内という条件で ay:=-5*重力加速度のように
逆加速度を代入する
のようにコントロール出来る
>>165 さん
ヘルプで見当たらないなぁって思ったらAPIだったんですね…
ありがとうございます。
>>166-167 さん
詳しい解説ありがとうございます。
差分方程式まではそれとなく知ってますが、DDAはわからないです…
アルゴリズムの本一冊読んで出直して来ます…
170 :
デフォルトの名無しさん :02/04/30 19:48
>>1 おぉ!初心者ハッケソ!
漏れは
>>1 以上に初心者だが、お互い頑張ろう。
今日は、横に移動してるときのジャンプを再現することが出来ましたヽ(´ー`)ノ
>>168 俺はそんな難しいことしてないです(汗
とりあえず、ジャンプしてるように見えればいいと思ったんで。
>>169 RPGは難しいと思いますが、頑張ってもらいたいですね。
>>170 俺より初心者ってことはないと思いますよ(笑
いっしょに頑張りましょう。
175 :
デフォルトの名無しさん :02/05/01 00:57
177 :
デフォルトの名無しさん :02/05/01 01:42
ポインタはいいねぇぇ
178 :
デフォルトの名無しさん :02/05/01 01:53
>>177 ポインタを覚えた事で一人前のマになったと勘違いして、それを他人に
伝えたくてたまらない黄金厨ですか?
>>179 あんたに言われたくないよ
専門学生さん(w
立派な大学行ってから意見しようね
Delphiは アクションゲームに対してあんまり便利さを提供してくれないけど アクションゲームにはスクリプトが必須、 そのスクリプトとスクリプトエディタを 作るには最適だ。
>>181 DDDDかDELPHIX使えば
HPS以上にゲーム作りやすくなるよ。
スクリプトエディタは確かに必要だね
タイマー使うのと OnIdle 使うのとどっちがいいの?
>>184 アクションゲームだとタイマーは使えないよ(精度悪すぎて)
>>183 いや、タイマーなんか使ってないです(汗
多分ソースも他の人が見たら訳わかんないと思います。
>>186 大丈夫“まともな”マなら分かってくれるから(泣
188 :
デフォルトの名無しさん :02/05/03 17:57
age
ゲームなら・・・ ・OnIdle ・メッセージループ自作 の2択ですな 別スレッド作るって手もあるか
成長したいならソースさらすのは必須かと。 叩きながらもおせっかいな人たちがアドバイスしてくれること請け合いだよ。
191 :
デフォルトの名無しさん :02/05/05 12:39
OnIdleで処理する場合、更新間隔を一定にするのはどうするの? OnIdleの入口で現在時刻を取っておいて、次回更新時刻(現在+1fps)より前だったら 何もしないで抜けるとか?
更新時間を一定にしたいなら OnIdleを使わないんじゃないの?
OnIdleを使うなら、
たとえば
>>71 のように、更新時間が変わっても動作が同じようになるようなスタイルを使うんじゃない?
色が抜けない…
今日はもう寝よう…疲れた
どうも御無沙汰してます。ゴールデンウィークなんで遊びに行ってました。で、今日帰ってきました。
>>190 怖すぎてできません(笑
>>1 は蒸発したか。やっぱり糞スレだったな・・と。
どうもご無沙汰してます。平日なんで引き籠もっていました。で、今日社会復帰しました。
>>190 糞スレではありません(笑
>平日なんで引き籠もっていました。で、今日社会復帰しました。 ?・・謎。デムパ? ・・・才能有りと見た!頑張れ!>1
200! ソースはさらしちゃえ! あと音はワロいますた。
201 :
当たって砕けろ :02/06/01 03:45
Delphi挑戦します。目標!シミュレーションゲーム! Delphi経験皆無、目標は程遠い。鬱。 とりあえずボタンおいてみよう・・・。
>>202 案内どうもです。
しかし俺製作技術以前の問題。鬱。
まあ、てきとうにやってみれば? 2ケ月くらいDelphi参考書と寝食を共にすると、並のゲームくらいつくれるだろうからさ。 うひひひ
>>204 まぢ!?
俺、もう少しで2ヶ月だけど、まだゲーム作るレヴェルじゃない…鬱…
>>205 遊びのレシピ買ってこい。
Delphiで各種ゲームの作り方が載ってる。
>>206 一応言うと、
>>203 ≠
>>205 なので。(笑)
俺、あんまりゲーム志向じゃないし、本まで買うのは遠慮しておきまふ。
ゲームも作ってみたいけど、素材集めるのが面倒そうで、やる気が起きませぬ。
>>207 >素材集めるのが面倒そうで、やる気が起きませぬ。
うん、是非やめてくれ。
ゲームを作りたい! と思ったものの、何をすれば良いのかわからず、 オンラインの講座とかをちょこちょこやってるだけの現実。鬱。
>210 貴方は私ですか?(鬱
>>211 同志ですか。鬱。
なーにをやればいいのやらです。まず画像表示したい。
ゲーム作るのに、クラスなどのオブジェクト指向の概念って勉強する必要はありますか
>>213 しなくても作れるけど、やると楽に作れるようになります。
Delphiと書かれているスレのツアーをお勧めします。この板とゲ技板。 あと入門本手に入れる。ぬるかったらゲーム制作系の入門本。 そして、検索検索検索ぅ! 202で待ち伏せ失敗したことは秘密だよ。
216 :
当たって砕けろ :02/06/03 15:54
小遣いはたいて参考書買いました!無一文!鬱。 Delphiオフィシャルコースウェア基礎編。 なかなかわかりやすくていいです。これみて頑張ります。
>>216 ヘルプだけで十分だ!と叫んでみる。
カーソルが指してるアイテムを著癖いつ引けるシステムは感動したけど。
218 :
デフォルトの名無しさん :02/06/03 16:57
219 :
当たって砕けろ :02/06/03 17:07
>>217 すいません、ヘルプ&講座サイトじゃ理解できませんでした。鬱。
Delphiのヘルプは難しいから〜
>>216 漏れはWinHelpだけで勉強したぞーー!鬱!
ポイントは「目次の順に読む」、これ最強!鬱!
なんか当たって砕けろ君の口癖が鬱っちゃったぞ!鬱!
>>221 おんなじ。おんなじ。
なぜかあの時言語仕様の図(名前失念、授業で習ったのに・・・)読めてた。
今読めない。鬱。
よくわからんが、鬱!
224 :
当たって砕けろ :02/06/04 16:46
caseとEdit1.Text使ってランダムにメッセージが表示されるものを作成。
すっげえ単純でくだらないけど初Delphi作品!うれしい!けど鬱。
>>221 ヘルプもちゃんと読んでみます。鬱。
>>223 俺もよくわかりませんが、鬱!
>>224 そうだ!がんばれ!
試行錯誤によって得られるノウハウこそあなたの最高の栄養です。
(俺の履歴書より)
質問です. MIDI音源を純音を出すにはどうすればよいですか? midioutshortmsgを使って音は出せるよになりました しかし音色がピアノとかなんたらばっかりで, 昔のPCのようなピーという機械音チックなのが出せません 何か手段があるでしょうか?
>>225 ありがとう!がんばるよ!
栄養取らないとな。鬱。ニホンジンハカルシウムブソク。
>>226 アンタはMIDIをFM音源かなにかと勘違いしてる
226>> MIDIでは純音をだせないのですか?? FM音源をコードで扱うことはできますか? 音の長さ,音程を操作できるのでしょうか? それができるならMIDIでもFMでもかまわないのですが・・・
>>229 アンタ>226?
純音ってのは正弦波のことでいいのか?
とりあえずGMの音色にはないぞ
GSやXGならあるだろうが(GSはあるのを確認した)
シンセ系の音色をソレっぽく加工しても正弦波は出せないと思うが・・・
>>229-230 とりあえずsin関数で正弦波発生させてwaveOut系のAPIに流せば?
一応「ぽーーーーー」ていう音叉みたいな音が出せるよ。
いわゆる「ぴーーーーー」っていう電子音は方形波の音に近いと思われ。
さらにFFT処理とかすると面白いけど、まぁ難しいんで割愛。
ゲーム作るんならDirectSound使ったほうがいいのかな?
漏れゲームは作った事無いからDirectX知らないんだな・・・
230>> 231>> なるほど ありがちょう 正弦波つくってwaveoutでやってみます ごいけんさんくすこ
まぁ、squareと各種パラメータを駆使すればなんとか・・・。 激しく機種依存だけど。
234 :
デフォルトの名無しさん :02/06/06 15:59
あg3え
今さらVB.NET(VB6ユーザも)やるくらいならC#ですね。 でも今までVBで適当なプログラム書いていた人は性根入れ直してからにしないと。
初めて簡単なゲームを作ろうと思い、まず背景を白くしようと思ったのですが、 Form1のpaintイベントで with Canvas do begin Brush.Color := clWhite; FillRect(0, 0, Form1.ClientWidth, Form1.ClientHeight); end; ってやったらダメなんすけど、何でですか? FillRectって引数がTRectでもInteger * 4でオーバーロードしてると思うんですが…。
237 :
当たって砕けろ :02/06/07 00:00
ボタンをクリックするだけの、RPG風擬似戦闘ver1ができました! でも内容的に見て戦闘にすらなってない罠。鬱。 これをもとにいろいろコマンドとか増やしてみよう・・・。
>>236 with Canvas do begin
Brush.Color := clWhite;
FillRect(Rect(0, 0, ClientWidth, ClientHeight));
end;
で出来たが、、、
>FillRectって引数がTRectでもInteger * 4でオーバーロードしてると思うんですが…。
Pascalではこーゆーいーかげんな事は許されません。
それが面倒と感じるか、律儀とかんじるかは貴方次第。
あと"Form1"ってのはDelphiが便宜上使ってるグローバル変数なんで、余程の事が
無い限り直接参照する必要は無い。
どうせPaintイベントハンドラもTForm1のクラスメソッドなんだから、何も書かな
けりゃ、そのTForm1のインスタンスの ClientWidth が参照される。
>>237 がむばれ!!鬱!
>>238 サンクス。
>FillRectって引数がTRectでもInteger * 4でオーバーロードしてると思うんですが…。
どこにも書いてなかった、誤爆スマソ!
最初はClientHeightとかだけにしてたんだけど、それでできなかったからForm1付けてみたんだよねー。
>>239 >最初はClientHeightとかだけにしてたんだけど、それでできなかったからForm1付けてみたんだよねー。
なるほど。
でも明示的に、「そのフォームのClientHeightが使いたい!」と書くなら、
Self.ClientHeight
って書くべきですな。
あれ、でもWith do ... の中でSelf使うとCanvasと誤認されて、
「ClientHeightなんてproperty無ぇぞゴルァ」ってコンパイラエラーでるかも。
var
Form: TForm1;
begin
Form := Self;
with Canvas do begin
Brush.Color := clWhite;
FillRect(Rect(0, 0, Form.ClientWidth, Form.ClientHeight));
end;
end;
って書くのが一番正当なやりかたなのかな?
>>240 そのメソッドをそのクラスでしか使わないから、「Form1.ClientWidth」でいいかなと思いまして。←言い訳かも…(;´Д`)
Selfってオブジェクトしか参照しないのでは?
だからわざわざクラス型変数Formは使わなくて良いのでは?
ゲーム作るっていっても、何から勉強していいのかわからないなぁ。
とりあえずTCanvasとTStreemをまず勉強しようと思ってますが…。
>>241 んー、まぁTForm1のインスタンスを2個以上作るってことは多分無いと
思うから、99.99%それで問題はないんだけど・・・
(もちろん2個以上のインスタンスを作りうる場合だと大問題!)
ま、教科書通り厳密にやるか、スッキリしたソースがいいか、のトレードオフですな。
>Selfってオブジェクトしか参照しないのでは?
TObject-TPersistent-TComponent-TControl-TWinControl-TScrollingWinControl-TCustonForm-TForm-TForm1
ってな具合で継承してるので、TForm1も元を辿ればTObject型、もちろんSelfも使えます。
>TStreem
一応TStreamといっておく。
>>241 言い方おかしかったですかね?
Selfにはそれの属するメソッド(今回の場合Form1のpaintイベント)を使用したオブジェクトが参照されるから、
with do...の中でCanvasと誤認することは有り得ないのでは?
ってことだったんですが。
スペル間違えてましたか。
なかなかTStreamが難しくて困ってるんですよね。
>>237 もうRPG作ってるんですか、早いですね。
どんなことから勉強はじめましたか?
参考に教えてもらいたいのですが。
>>243 がーーーーーーーーーーーーーーーーーーん。
今までずっとSelfって、TObject型の読み出し専用プロパティで、
そのインスタンスのアドレスを指すものだと思ってた。。。。。
今ヘルプ引いてみたら・・・・違ってるやん。
今晩はLANケーブルで首吊って寝ます。
>>243 いや、RPG作ってるわけじゃないです。そんな高度なことできません。鬱。
ただ攻撃ボタン置いたりEditに文章表示させるだけです。鬱。
>どんなことから
変数からやりました・・・。
ひとまずこれだけは押さえておこうと思い。
>>245 そうでしたか。
俺もゲーム作りたいのでお互い頑張りましょう。
マジで何からやればいいんじゃー!?( T▽T)
ShellLinkの件、もしかして VB のようにやりたいという事なら procedure TForm1.Button1Click(Sender: TObject); var guid:TGUID; var objShell : OLEVariant; var objFolder : OLEVariant; var objFolderItems: OLEVariant; var objFolderItem : OLEVariant; var lk:OLEVariant; var LNKpath,LNKname:WideString; begin LNKpath:='C:\Documents and Settings\Administrator\SendTo'; LNKname:='K2Grep.LNK'; guid:=ProgIDToClassID('Shell.Application'); objShell := CreateComObject(guid) as IDispatch; objFolder := objShell.NameSpace( OLEVariant(LNKpath)) ; objFolderItems:= objFolder.Items ; objFolderItem := objFolderItems.Item(OLEVariant(LNKname)); lk:= objFolderItem.GetLink; Caption:=lk.Path; end; とOleVariantを使って IShellLinkではなくShellLinkObjectを使えばいいのでは? IDispatchでは遅いという事なら、 ActiveXの取り込みで Shell32.dll を取り込んでおいて procedure TForm1.Button2Click(Sender: TObject); var guid:TGUID; var objShell : IShellDispatch; var objFolder : Folder; var objFolderItem: FolderItem; var lk:IShellLinkDual2 ; var path,LNKname:WideString; begin path:='C:\Documents and Settings\Administrator\SendTo'; LNKname:='K2Grep.LNK'; guid:=ProgIDToClassID('Shell.Application'); objShell := CreateComObject(guid) as IShellDispatch ; objFolder := objShell.NameSpace(path); objFolderItem:=(objFolder.Items as FolderItems).Item(LNKname); lk:= objFolderItem.GetLink as IShellLinkDual2; Caption:=lk.Path; end; とすれば、良いと思う
あっとゴメン ミス
249 :
当たって砕けろ :02/06/15 20:41
方向キーでImageに画像出してTopとLeftの値をいじって動かしてます。鬱。 こ、これがゲームへの第一歩なのかあぁあ?!鬱!
>>249 勿論本格的なゲームなら、描画速度とかいろいろ問題になるかも知れんけど
第一歩としてはそれでいいんじゃない。
DirectX使わなきゃ駄目なんだー、なんて思い込んでるといつまでたっても
完成しないからね。
その方法で出来るところまでやってみて、描画速度がボトルネックになってるな、
と感じたらそこを改良して、そのうちソースがぐちゃぐちゃになって、鬱になって
最初から書き直して・・・
そんなこと繰り返してる間に上達して、ゲームも完成していくよ。
ガムバレ、鬱!!!
252 :
デフォルトの名無しさん :
02/06/24 15:17