Re: Visual C++ 2010において ( No.11 ) |
- 名前:いっち 日時:2011/06/17 20:28
> 決定的にどこが違うのでしょう?
基本的に違いはほとんどありません。あえて言うなら読み込む画像ファイルのパスを相対パスで指定している程度です。
(それ以外の増えているコードは確認用のものでほとんど意味はありません)
というわけで、gozinkさんの環境に何も問題ないことがほぼ確認できました。
(No.8)のレスでgozinkさんに書き込んで頂いたコードに戻ります。
まず、以下のように変更してください。
> LoadGraphScreen( 320, 250, "C:\\DownLoads\\image.jpg" , TRUE );
↓↓↓↓
> LoadGraphScreen( 0, 0, "image.jpg", TRUE );
次にプロジェクトが格納されているフォルダ (作成したプロジェクトの名前が"test1"であれば、
"test1.sln"や"test1.vcproj"("test1.vcxproj"かも)等の存在するフォルダ) に "image.jpg" をコピー(作成)して下さい。
その後、そのプロジェクトを開き「デバッグ開始」を行ってください。
結果としては "image.jpg" が表示されると思います。
|
Re: Visual C++ 2010において ( No.12 ) |
- 名前:gozink 日時:2011/06/17 21:49
やっとです!
できました!!
本当にありがとうございました
とても親切でわかりやすかったです
次またわからないことがあったら、その時はお願いします
|
Re: Visual C++ 2010において ( No.13 ) |
- 名前:いっち 日時:2011/06/17 22:25
うまくいって何よりなのですが、(No.8)のコードが動作しなかったのは
"C:\\DownLoads\\image.jpg" というパスの指定に問題があったためだと思います。
(C言語の規則や絶対パスの表記方法としては問題ありません)
再度、こういった問題にあった場合は、ファイルを右クリックして出るメニューから「プロパティ」を選び、
表示されるダイアログの「場所」という項目をご確認下さい。
|
Re: Visual C++ 2010において ( No.14 ) |
- 名前:gozink 日時:2011/06/17 22:53
はい、わかりました
最後の最後までありがとうございます
これからもお世話になると思います(笑
|
Re: Visual C++ 2010において ( No.15 ) |
- 名前:gozink 日時:2011/06/25 09:53
新たに質問です
プログラムでファイルを分割しているのですが、C++のクラスを使って
void Player_Show( Player_t *Player, int y ){
Player->Image = LoadGraph( "01.png" );
Player->y = y;
}
ってどういう風に書き換えたらいんでしょうか?
ちなみにこれは構造体なんですが・・・
|
Re: Visual C++ 2010において ( No.16 ) |
- 名前:いっち 日時:2011/06/25 13:13
Player_t という構造体の役割や Player_Show という関数の目的も良く分かりませんでしたので、
とりあえず、こんな感じなんじゃないだろうかという推測で適当にクラス化してみました。
※ コードを若干修正しました
//- 以下、テストコード ("test1.bmp"を使用)-//
#include "DxLib.h"
class PLAYER {
int x_, y_;
int graph_handle_;
PLAYER( const PLAYER& other ); // とりあえずコピー禁止
PLAYER& operator =( const PLAYER& other ); // とりあえずコピー禁止
public:
explicit PLAYER( const TCHAR* ImageFile ) : x_( 0 ), y_( 0 ), graph_handle_( -1 ) {
if ( !ImageFile )
return;
graph_handle_ = LoadGraph( ImageFile );
}
~PLAYER( void ) {
DeleteGraph( graph_handle_ );
graph_handle_ = -1;
}
void Move( int x, int y ) { x_ = x; y_ = y; };
void Draw( void ) const ;
};
void PLAYER::Draw( void ) const {
DrawGraph( x_, y_, graph_handle_, TRUE );
}
int WINAPI WinMain( HINSTANCE, HINSTANCE, LPSTR, int )
{
ChangeWindowMode( TRUE );
SetWindowText( "DxLib:" DXLIB_VERSION_STR );
if ( DxLib_Init( ) == -1 ) return -1;
int white = GetColor( 255, 255, 255 );
PLAYER p( "test1.bmp" );
p.Move( 100, 100 );
SetDrawScreen( DX_SCREEN_BACK );
while ( ProcessMessage( ) == 0 && CheckHitKey( KEY_INPUT_ESCAPE ) == 0 ) {
ClearDrawScreen( );
DrawFormatString( 0, 0, white, "TEST" );
p.Draw( );
ScreenFlip( );
}
DxLib_End( );
return 0;
}
|
Re: Visual C++ 2010において ( No.17 ) |
- 名前:gozink 日時:2011/06/25 16:19
説明が足りませんでした
すいません
なるほど
わかりました
凄く参考になりました
他のファイルで作ったクラスを使うには
[クラス名] [変数] (それが入ってるファイル)
という風に宣言すればいいんですね
|
Re: Visual C++ 2010において ( No.18 ) |
- 名前:gozink 日時:2011/06/25 17:03
画像(プレイヤー)が画面に二つ出すためにの関数はクラスでどうやって書くのでしょうか?
手間をかけてしまってすいません
|
Re: Visual C++ 2010において ( No.19 ) |
- 名前:いっち 日時:2011/06/25 17:21
( No.17 )へのレスです。
> 他のファイルで作ったクラスを使うには
> [クラス名] [変数] (それが入ってるファイル)
> という風に宣言すればいいんですね
いえ、全然違います。
> PLAYER p( "test1.bmp" );
というコードの "test1.bmp" は読み込むの画像ファイルの指定であって、ソースの指定ではありません。
(No.15)でいうところの "01.png" にあたります。
(No.16)のコードは(No.15)のレスを「Player_Show をどのようにクラス化するのか?」という問いだと思って回答したものです。
「単一のソースコードを複数の翻訳単位に分ける」という話であれば(No.16)のコードは以下の様になります。
(2つの翻訳単位に分けています。ファイルは3つ)
ソースファイルの分割はC/C++の全体的な知識が必要となりますので、不明な点は専門の書籍やサイトをご覧になることをお勧めします。
/* player.h ***** PLAYER クラスの定義 *****************************************/
#pragma once
#include "DxLib.h"
class PLAYER {
int x_, y_;
int graph_handle_;
PLAYER( const PLAYER& other ); // とりあえずコピー禁止
PLAYER& operator =( const PLAYER& other ); // とりあえずコピー禁止
public:
explicit PLAYER( const TCHAR* ImageFile ) : x_( 0 ), y_( 0 ), graph_handle_( -1 ) {
if ( !ImageFile )
return;
graph_handle_ = LoadGraph( ImageFile );
}
~PLAYER( void ) {
DeleteGraph( graph_handle_ );
graph_handle_ = -1;
}
void Move( int x, int y ) { x_ = x; y_ = y; };
void Draw( void ) const;
};
/* player.cpp ***** 翻訳単位その1 PLAYER クラスのメンバの定義 ****************/
#include "player.h" // クラスの定義はそのクラスのメンバ関数を定義する翻訳単位にも必要
void PLAYER::Draw( void ) const {
DrawGraph( x_, y_, graph_handle_, TRUE );
}
/* main.cpp ***** 翻訳単位その2 PLAYER クラスを使用 **************************/
#include "DxLib.h"
#include "player.h" // クラスの定義はそのクラスを使用する翻訳単位すべてに必要
void MoveScreenCenter( PLAYER& player ) { // クラスを引数に取る関数の例として追加
player.Move( 640 / 2, 480 / 2 );
}
int WINAPI WinMain( HINSTANCE, HINSTANCE, LPSTR, int )
{
ChangeWindowMode( TRUE );
SetWindowText( "DxLib:" DXLIB_VERSION_STR );
if ( DxLib_Init( ) == -1 ) return -1;
int white = GetColor( 255, 255, 255 );
PLAYER p( "test1.bmp" );
MoveScreenCenter( p );
SetDrawScreen( DX_SCREEN_BACK );
while ( ProcessMessage( ) == 0 && CheckHitKey( KEY_INPUT_ESCAPE ) == 0 ) {
ClearDrawScreen( );
DrawFormatString( 0, 0, white, "TEST" );
p.Draw( );
ScreenFlip( );
}
DxLib_End( );
return 0;
}
|
Re: Visual C++ 2010において ( No.20 ) |
- 名前:gozink 日時:2011/06/25 17:32
確かにbmpは画像の種類でしたね(汗
また初心的なところを見せてしまいました
なるほど本当に参考になりました
サイトや本ではあまり詳しいのが見つけられず、あるのは C の説明だけだったので、少し困惑していました
これで進めれそうです
ありがとうございます
|
Re: Visual C++ 2010において ( No.21 ) |
- 名前:gozink 日時:2011/07/31 18:10
プログラミングで壁に対する判定、フラグを書きたいんですが、
どうすればいいでしょうか?
自分の考えではC++のフラグ(flag)を使おうと思ったのですが、
フラグ自体良く理解できません
良い方法を教えていただけませんか?
|
Re: Visual C++ 2010において ( No.22 ) |
- 名前:いっち 日時:2011/07/31 18:27
C/C++に"flag"といった機能はありません(bool型ならあります)。
壁の判定については、「DXライブラリ サンプルプログラム」のサンプルが参考になると思います。
4.マップスクロール基本
>://homepage2.nifty.com/natupaji/DxLib/dxprogram.html#N4
29.アクションゲームにおけるマップとの当たり判定基本
>://homepage2.nifty.com/natupaji/DxLib/program/ActionSample.cpp
31.迷路を3Dで表示
>://homepage2.nifty.com/natupaji/DxLib/program/dxprogram_3Dmeiro.html
32.3Dアクション基本
>://homepage2.nifty.com/natupaji/DxLib/program/dxprogram_3DAction.html
|
Re: Visual C++ 2010において ( No.23 ) |
- 名前:gozink 日時:2011/07/31 22:40
それです
bool型のflagです
壁のあたり判定を二進数の一番左の桁、128の桁で判定しようと思ったんですが、
ビット演算による判定はできてもそもそもflagの組み立て方が良くわからなくて詰まりました
本当に基本的なサンプルでいいので見せていただけないでしょうか?
Dxライブラリだとこういう風にやるんですね
参考になります
ありがとうございます
|
Re: Visual C++ 2010において ( No.24 ) |
- 名前:いっち 日時:2011/07/31 23:31
ちょっとわかっていないので確認ですが、
gozinkさんはマップチップのようなものでマップを組み立てていて、
そのマップチップのID(のようなもの)の8ビット目を進入可否のフラグにしようと思ったが、
マップの座標ごとに8ビット目の ON/OFF をしたり、データを管理する方法が分からなかった。
そこで、8ビット目の変わりにbool型を使って進入可否のフラグにしようと思った、
ということでしょうか?
|
Re: Visual C++ 2010において ( No.25 ) |
- 名前:gozink 日時:2011/08/01 10:36
そうです
説明が足りずすいません
参考書を見てもあまりわからなかったので、
自分でも色々考えたのですが、
余計わからなくなりました
一応考え方としては
シフトを使って8ビット目に1があるかを確認し、あったらフラグをオンにするというものでした
間違って無いでしょうか?
|
Re: Visual C++ 2010において ( No.26 ) |
- 名前:いっち 日時:2011/08/01 22:29
ご要望にお答えできているか分かりませんが、とりあえず、両方のパターンを作ってみました。
( #if で切り替えです。途中が違うだけで両者とも結果は同じです。)
> :// w w w1.axfc.net/uploader/Sc/so/261007.zip&key=dxlib
|
Re: Visual C++ 2010において ( No.27 ) |
- 名前:gozink 日時:2011/08/02 13:05
わざわざ二つとも書いていただきありがとうございました
とてもわかりやすかったです
ありがとうございました
|
Re: Visual C++ 2010において ( No.28 ) |
- 名前:gozink 日時:2011/08/03 11:37
たびたびすいません
書いていただいたプログラムを参考にマップを歩くといったものを作ろうとしたのですが、
キャラが表示されません
表示系関数が間違っているんでしょうか?
マップを表示して、キャラを表示をするにはどうしたらいいでしょうか?
|
Re: Visual C++ 2010において ( No.29 ) |
- 名前:いっち 日時:2011/08/03 19:41
普通に DrawGraph 等で描画すれば良いと思います。
ソースを拝見しないと「なぜ描画されないのか?」といったことは分かりかねます。
|
Re: Visual C++ 2010において ( No.30 ) |
- 名前:gozink 日時:2011/08/04 11:03
すいません
関数を書き間違えていました(汗
ちゃんと見てから来るべきでした
すいません
|