PlayerBullet.h
#pragma once
#include "Player.h"
#include "Define.h"
class PlayerBullet : public Task
{
friend class Player;
public:
PlayerBullet();
virtual ~PlayerBullet() = default;
bool update() override;
void draw() const override;
private:
void move();
bool flag; //フラグ
int cnt; //カウンタ
int type; //種類
float _x, _y; //座標
float speed; //スピード
};
PlayerBullet.cpp
#include <DxLib.h>
#include "Pad.h"
#include "Define.h"
#include "Image.h"
const static float SPEED = 9.0;
PlayerBullet::PlayerBullet() :
_x((float)Define::CENTER_X),
_y((float)Define::OUT_H * 0.8f)
{
flag = 0;
speed = 50;
}
bool PlayerBullet::update()
{
void move();
return true;
}
void PlayerBullet::draw() const
{
PlayerBullet Bullet[4][25];
for (int i = 0; i < 4; i++) {
for (int j = 0; j < Define::PBULLET_NUM / 4; j++) {
Bullet[i][j].flag = false;
}
}
if (Pad::getIns()->get(ePad::shot) > 0)
{
for (int i = 0; i < 4; i++) {
for (int j = 0; j < Define::PBULLET_NUM / 4; j++) {
if (Bullet[i][j].flag == false) { //弾の座標の更新
Bullet[i][j]._x = _x + Define::coption0pos_x[i];
Bullet[i][j]._y = _y + Define::coption0pos_y[i];
Bullet[i][j].flag = true;
}
}
}
}
for (int i = 0; i < 4; i++) {
for (int j = 0; j < Define::PBULLET_NUM / 4; j++) {
if (Bullet[i][j].flag == true)
{
Bullet[i][j]._y -= speed; //弾の座標を上にずらす
if (Bullet[i][j]._y <= Define::IN_Y) //枠外へ行ったらフラグをfalseにする。
{
Bullet[i][j].flag = false;
}
DrawRotaGraphF(Bullet[i][j]._x, Bullet[i][j]._y, 1.0, 0.0, Image::getIns()->getPlayerBullet()[1], FALSE); //描画する
}
}
}
}
void PlayerBullet::move()
{
float moveX = 0, moveY = 0;
if (Pad::getIns()->get(ePad::left) > 0) { //左移動
moveX -= SPEED;
}
if (Pad::getIns()->get(ePad::right) > 0) { //右移動
moveX += SPEED;
}
if (Pad::getIns()->get(ePad::down) > 0) { //下移動
moveY += SPEED;
}
if (Pad::getIns()->get(ePad::up) > 0) { //上移動
moveY -= SPEED;
}
if (moveX && moveY) { //斜め移動
moveX /= (float)sqrt(2.0);
moveY /= (float)sqrt(2.0);
}
if (Pad::getIns()->get(ePad::slow) > 0) { //低速移動
moveX /= 3;
moveY /= 3;
}
if (moveX + _x < Define::IN_X) { //左枠より左なら
_x = (float)Define::IN_X; //左枠で止める
}
else if (moveX + _x > Define::IN_X + Define::IN_W) { //右枠より右なら
_x = (float)(Define::IN_X + Define::IN_W); //右枠で止める
}
else { //枠内なら
_x += moveX; //普通に移動
}
if (moveY + _y < Define::IN_Y) { //上枠より上なら
_y = (float)Define::IN_Y; //上枠で止める
}
else if (moveY + _y > Define::IN_Y + Define::IN_H) { //下枠より下なら
_y = (float)(Define::IN_Y + Define::IN_H); //下枠で止める
}
else { //枠内なら
_y += moveY; //普通に移動
}
}
デバッグをしてみると、処理一回分だけ上に移動したところで重なって描画されてしまい、その場に留まってしまいます。
また、ショットキーを押すと自機のオプションの部分から弾が発射されるようにしたいのですが(そのためmove関数でオプションに合わせて座標を更新しているつもり)、常に最初の場所で描画がされてしまいます。
サイトなどで色々調べましたが結局うまくいかず、、助力をお願い致します。