初投稿です。
まだこのサイトに来て日が浅いので、至らないところが多々あると思いますので。ご指導のほどよろしくお願いします。
以下テンプレを使って質問させていただきます。
[1] DXライブラリでの画像の表示と当たり判定について質問です。
[1.1] 自分が今行いたいことは何か
関数を使って当たり判定をつけてみたいです。
[1.2] どのように取り組んだか(プログラムコードがある場合記載)
DXライブラリ ゲームプログラム講座というサイトでプログラムをそのまま書き映しながら
学んでいます。
http://dxlib.o.oo7.jp/dxlecture_main.html
ですが、最近学校の授業でクラスの使い方や、関数の使い方について少し学んだので
活用してみようと思い、自分なりにクラスを作って関数を使って動かしてみようと思い、
キー入力による画像の移動はできたのですが、同じ関数に当たり判定も入れてみようとしたところ
画像が映らなくなったのでどうしようかと思い質問しました。
以下、コードです
コード:
#include "DxLib.h"
#include <string>
#include "../DxLib Project2/Inputstate.h"
#include "../DxLib Project2/Inputstate.cpp"
using namespace std;
Inputstate input;
int WINAPI WinMain(HINSTANCE hinstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int CmdShow)
{
int Ball_x, Ball_y,SikakuMuki,Sikaku_x,Sikaku_y;
int BallHandle, SikakuHandle;
SetGraphMode(640, 480, 16);
ChangeWindowMode(TRUE);
if (DxLib_Init() == -1) return -1;
SetDrawScreen(DX_SCREEN_BACK);
//ボールの画像を読み込み&ボールの座標の指定
BallHandle = LoadGraph("Textures/Ball.png");
Ball_x = 288; Ball_y = 400;
//四角の画像を読み込み&四角の座標の指定
SikakuHandle = LoadGraph("Textures/Sikaku.png");
Sikaku_x = 0; Sikaku_y = 50;
SikakuMuki = 1;
//移動繰り返し処理
while (1)
{
ClearDrawScreen();
{
Ball_x = input.XKey(Ball_x);
Ball_y = input.YKey(Ball_y);
DrawGraph(Ball_x, Ball_y, BallHandle, FALSE);
}
{
Sikaku_x -= 3;
Sikaku_y -= 2;
DrawGraph(Sikaku_x, Sikaku_y, SikakuHandle, FALSE);
}
ScreenFlip();
if (ProcessMessage() != 0) break;
if (CheckHitKey(KEY_INPUT_ESCAPE) == 1) break;
}
DxLib_End();
return 0;
-----------------------------------------------------------
コード:
#pragma once
#include "DxLib.h"
#include<string>
using namespace std;
class Inputstate
{
public:
Inputstate();
~Inputstate();
///<summary>
///X座標
///</summary>
///<param name="x"></param>
public:int XKey(int x)
{
if (CheckHitKey(KEY_INPUT_LEFT) == 1) x -= 3;
if (CheckHitKey(KEY_INPUT_RIGHT) == 1) x += 3;
if (x < 0) x = 0;
if (x > 640 - 64) x = 640 - 64;
return x;
}
///<summary>
///Y座標
///</summary>
///<param name="x"></param>
public:int YKey(int y)
{
if (CheckHitKey(KEY_INPUT_DOWN) == 1) y += 3;
if (CheckHitKey(KEY_INPUT_UP) == 1) y -= 3;
if (y < 0) { y = 0; }
if (y > 480 - 640) { y = 640 - 64; }
return y;
}
[1.3] どのようなエラーやトラブルで困っているか(エラーメッセージが解る場合は記載)
エラーは出ていませんが、画面端の当たり判定を付けた途端画像が表示しなくなります。
また、当たり判定は、当たり判定の関数。キー入力はキー入力の関数って感じで分けてみたいです。
[1.4] 今何がわからないのか、知りたいのか
関数でx座標とy座標を同時に返したいです。
ですが、色々調べたところ返り値は一つしか返せないと知り、どのように二つの座標を返せばいいかがわからないです。
C++はつい最近習い始めたので用語とか知らなくて具体的に説明できませんが関数でxとy座標を同時に返す
ことは可能でしょうか?拙い質問ですがよろしくお願いします。
[2] 環境
[2.1] OS : Windows
[2.2] コンパイラ名 : VC++ 2017
[3] その他
・どの程度C言語を理解しているか
基礎のif文やfor文、配列、List,Dictionary,クラス、クラスの継承などを学校で習っています。
今現在習っている部分はクラスの継承の部分です。
・ライブラリを使っている場合は何を使っているか
DXライブラリ
使い方が間違ってる等ありましたらご指摘ください。