#3
by ケイン » 5年前
みけCATさん、回答ありがとうございます!
アドバイスを色々とありがとうございます。LoadDivGraph関数で画像を一つしか読み込ませる方法もあるということですか、参考にします!
新・ゲームプログラミングの館の「管理部の作り方」を参考にコードを書いたという感じですが、正直なところ理解していないことが多いです(汗)
失敗しているコードはこちらです
player.cpp
コード:
#include "DxLib.h"
#include "keyboard.h"
#include "player.h"
// 初期化をする
void Player_Initialize(Player_t *Player, int x,int y, int img,int frameindex,int counter) {
Player->Image = img;
Player->y = y;
Player->x = x;
Player->frameindex = frameindex;
Player->counter = counter;
}
// 動きを計算する
void Player_Update(Player_t *Player) {
if (Keyboard_Get(KEY_INPUT_UP) > 0) {
Player->y-=2;
}
if (Keyboard_Get(KEY_INPUT_DOWN) > 0) {
Player->y+=2;
}
if (Keyboard_Get(KEY_INPUT_RIGHT) > 0) {
Player->x+=2;
Player->counter++;
Player->frameindex = 0 + (Player->counter % 64) / 8;
}
if (Keyboard_Get(KEY_INPUT_LEFT) > 0) {
Player->x-=2;
Player->counter++;
Player->frameindex = 9 + (Player->counter % 64) / 8;
}
}
// 描画する
void Player_Draw(Player_t Player) {
DrawGraph(Player.x, Player.y, Player.Image, TRUE);
}
// 終了処理をする
void Player_Finalize(Player_t Player) {
}
player.h
コード:
#pragma once
#ifndef DEF_PLAYER_H //二重include防止
#define DEF_PLAYER_H
typedef struct {
int Image;
int y;
int x;
int frameindex;
int counter;
}Player_t;
// 初期化をする
void Player_Initialize(Player_t *Player, int x ,int y, int img,int frameindex,int counter);
// 動きを計算する
void Player_Update(Player_t *Player);
// 描画する
void Player_Draw(Player_t Player);
// 終了処理をする
void Player_Finalize(Player_t Player);
#endif
playerMgr.cpp
コード:
include "DxLib.h"
#include "Keyboard.h"
#include "Player.h"
static const int NUM = 2; //プレイヤーの数
static Player_t m_Player[NUM]; //プレイヤーの実体
static int m_ImgPlayer; //プレイヤーの画像ハンドル
static int Phandle[18];
// 初期化をする
void PlayerMgr_Initialize() {
m_ImgPlayer = LoadDivGraph("image/plaruki.png", 18, 3, 6, 200, 200, Phandle);
Player_Initialize(&m_Player[0],0,0, m_ImgPlayer,0,0);// 初期化
}
// 動きを計算する
void PlayerMgr_Update() {
for (int i = 0; i<NUM; i++) {
Player_Update(&m_Player[i]);//更新
}
}
// 描画する
void PlayerMgr_Draw() {
for (int i = 0; i<NUM; i++) {
Player_Draw(m_Player[i]);//描画
}
}
// 終了処理をする
void PlayerMgr_Finalize() {
for (int i = 0; i<NUM; i++) {
Player_Finalize(m_Player[i]);//終了処理
}
DeleteGraph(m_ImgPlayer); //画像を解放
}
player.cppのDrawGraphの()の中と、playerMgr.cppのplayer_Initializeの()の中を書き換えれば
問題は解決しそうだと考えているのですが、どういうふうに書き換えればいいか分かりません。
またこんな長いコードを見せることになってしまいましたが、よろしくお願いいたします。
みけCATさん、回答ありがとうございます!
アドバイスを色々とありがとうございます。LoadDivGraph関数で画像を一つしか読み込ませる方法もあるということですか、参考にします!
新・ゲームプログラミングの館の「管理部の作り方」を参考にコードを書いたという感じですが、正直なところ理解していないことが多いです(汗)
失敗しているコードはこちらです
player.cpp
[code]
#include "DxLib.h"
#include "keyboard.h"
#include "player.h"
// 初期化をする
void Player_Initialize(Player_t *Player, int x,int y, int img,int frameindex,int counter) {
Player->Image = img;
Player->y = y;
Player->x = x;
Player->frameindex = frameindex;
Player->counter = counter;
}
// 動きを計算する
void Player_Update(Player_t *Player) {
if (Keyboard_Get(KEY_INPUT_UP) > 0) {
Player->y-=2;
}
if (Keyboard_Get(KEY_INPUT_DOWN) > 0) {
Player->y+=2;
}
if (Keyboard_Get(KEY_INPUT_RIGHT) > 0) {
Player->x+=2;
Player->counter++;
Player->frameindex = 0 + (Player->counter % 64) / 8;
}
if (Keyboard_Get(KEY_INPUT_LEFT) > 0) {
Player->x-=2;
Player->counter++;
Player->frameindex = 9 + (Player->counter % 64) / 8;
}
}
// 描画する
void Player_Draw(Player_t Player) {
DrawGraph(Player.x, Player.y, Player.Image, TRUE);
}
// 終了処理をする
void Player_Finalize(Player_t Player) {
}
[/code]
player.h
[code]
#pragma once
#ifndef DEF_PLAYER_H //二重include防止
#define DEF_PLAYER_H
typedef struct {
int Image;
int y;
int x;
int frameindex;
int counter;
}Player_t;
// 初期化をする
void Player_Initialize(Player_t *Player, int x ,int y, int img,int frameindex,int counter);
// 動きを計算する
void Player_Update(Player_t *Player);
// 描画する
void Player_Draw(Player_t Player);
// 終了処理をする
void Player_Finalize(Player_t Player);
#endif
[/code]
playerMgr.cpp
[code]
include "DxLib.h"
#include "Keyboard.h"
#include "Player.h"
static const int NUM = 2; //プレイヤーの数
static Player_t m_Player[NUM]; //プレイヤーの実体
static int m_ImgPlayer; //プレイヤーの画像ハンドル
static int Phandle[18];
// 初期化をする
void PlayerMgr_Initialize() {
m_ImgPlayer = LoadDivGraph("image/plaruki.png", 18, 3, 6, 200, 200, Phandle);
Player_Initialize(&m_Player[0],0,0, m_ImgPlayer,0,0);// 初期化
}
// 動きを計算する
void PlayerMgr_Update() {
for (int i = 0; i<NUM; i++) {
Player_Update(&m_Player[i]);//更新
}
}
// 描画する
void PlayerMgr_Draw() {
for (int i = 0; i<NUM; i++) {
Player_Draw(m_Player[i]);//描画
}
}
// 終了処理をする
void PlayerMgr_Finalize() {
for (int i = 0; i<NUM; i++) {
Player_Finalize(m_Player[i]);//終了処理
}
DeleteGraph(m_ImgPlayer); //画像を解放
}
[/code]
player.cppのDrawGraphの()の中と、playerMgr.cppのplayer_Initializeの()の中を書き換えれば
問題は解決しそうだと考えているのですが、どういうふうに書き換えればいいか分かりません。
またこんな長いコードを見せることになってしまいましたが、よろしくお願いいたします。