#include <graphics.h>
#include "Sprite.h"
#include "input.h"
#include <chrono>
#include <windows.h>
#include "audio_player.hpp"
#include "UI.h"
#include "AssetManager.h"
float vy = 0.0f;
const float gravity = 0.5f;
const float jumpSpeed = -14.0f;
const float groundY = 400.0f;
int main() {
// 初始化图形窗口
initgraph(960, 640, EW_SHOWCONSOLE);
IMAGE background;
loadimage(&background, _T("C:\\Users\\lin13\\Source\\Repos\\lumin2D\\lumin2D\\resources\\background.png"));
// 创建输入处理器
InputHandler input;
Sprite patman;
patman.AddState("right", _T("C:\\Users\\lin13\\Desktop\\提瓦特幸存者\\img\\player_right_%d.png"), 6, 100, true);
patman.AddFlipAnim("right", "right_flip");
// 创建精灵对象
Sprite player;
// 加载动画(假设精灵图为水平排列的帧)
/*
IMAGE spriteSheet;
loadimage(&spriteSheet, _T("C:\\Users\\lin13\\Source\\Repos\\lumin2D\\lumin2D\\resources\\player\\run.png")); // 请确保路径正确
IMAGE jumpSpriteSheet;
loadimage(&jumpSpriteSheet, _T("C:\\Users\\lin13\\Source\\Repos\\lumin2D\\lumin2D\\resources\\player\\jump.png"));
IMAGE idleSheet;
loadimage(&idleSheet, _T("C:\\Users\\lin13\\Source\\Repos\\lumin2D\\lumin2D\\resources\\player\\idle.png"));
*/
AssetManager assetmanager;
std::shared_ptr<TextureAtlasAsset> player_run_atlas = std::make_shared<TextureAtlasAsset>("player_run_atlas", _T("C:\\Users\\lin13\\Source\\Repos\\lumin2D\\lumin2D\\resources\\player\\run.png"), 10);
std::shared_ptr<TextureAtlasAsset> player_jump_atlas = std::make_shared<TextureAtlasAsset>("player_jump_atlas", _T("C:\\Users\\lin13\\Source\\Repos\\lumin2D\\lumin2D\\resources\\player\\jump.png"), 5);
std::shared_ptr<TextureAtlasAsset> player_idle_atlas = std::make_shared<TextureAtlasAsset>("player_idle_atlas", _T("C:\\Users\\lin13\\Source\\Repos\\lumin2D\\lumin2D\\resources\\player\\idle.png"), 5);
std::shared_ptr<TextureAtlasAsset> player_run_atlas_flip = player_run_atlas->CreateFlipped("player_run_atlas_flip");
std::shared_ptr<TextureAtlasAsset> player_jump_atlas_flip = player_jump_atlas->CreateFlipped("player_jump_atlas_flip");
std::shared_ptr<TextureAtlasAsset> player_idle_atlas_flip = player_idle_atlas->CreateFlipped("player_idle_atlas_flip");
assetmanager.AddExistingAsset("player_run_atlas", player_run_atlas);
assetmanager.AddExistingAsset("player_jump_atlas", player_jump_atlas);
assetmanager.AddExistingAsset("player_idle_atlas", player_idle_atlas);
assetmanager.AddExistingAsset("player_run_atlas_flip", player_run_atlas_flip);
assetmanager.AddExistingAsset("player_jump_atlas_flip", player_jump_atlas_flip);
assetmanager.AddExistingAsset("player_idle_atlas_flip", player_idle_atlas_flip);
Animation Run(player_run_atlas);
Animation Jump(player_jump_atlas);
Animation Idle(player_idle_atlas);
Animation Run_flip(player_run_atlas_flip);
Animation Jump_flip(player_jump_atlas_flip);
Animation Idle_flip(player_idle_atlas_flip);
player.AddState("Run", Run);
player.AddState("Jump", Jump);
player.AddState("Idle", Idle);
player.AddState("Run_flip", Run_flip);
player.AddState("Jump_flip", Jump_flip);
player.AddState("Idle_flip", Idle_flip);
player.SetTransition("Jump", "Run");
assetmanager.LoadAllAssets();
//player.AddState("Run", _T("C:\\Users\\lin13\\Source\\Repos\\lumin2D\\lumin2D\\resources\\player\\run.png"), 10, 100, true); //10帧,间隔100ms,循环播放
//player.AddState("Jump", _T("C:\\Users\\lin13\\Source\\Repos\\lumin2D\\lumin2D\\resources\\player\\jump.png"), 5, 120, false);
//player.AddState("Idle", _T("C:\\Users\\lin13\\Source\\Repos\\lumin2D\\lumin2D\\resources\\player\\idle.png"), 5, 100, true);
//player.AddFlipAnim("Run", "Run_flip");
//player.AddFlipAnim("Jump", "Jump_flip");
//player.AddFlipAnim("Idle", "Idle_flip");
//player.SetTransition("Jump", "Run");
// 设置初始状态
Vector2 pos;
pos.x = 100;
pos.y = 100;
Vector2 v(6, 1);
Vector2 pos2(200, 500);
patman.SetState("right", pos, v);
player.SetState("Idle", pos2, v);
Camera cam;
BeginBatchDraw();
// 主循环
bool facingLeft = false; // 朝向标志
bool jumping = false; // 跳跃中标志
//UI
TextBox textbox1(200,200, 80, 50, "5月18号");
Button esc_button(300, 200, 80, 50, "退出游戏");
//音频
AudioPlayer BGM,player_jump,player_run;
BGM.init("C:\\Users\\lin13\\Desktop\\game2\\resources\\audio\\bgm.mp3", "bgm");
player_jump.init("C:\\Users\\lin13\\Desktop\\game2\\resources\\audio\\player_jump.mp3", "player_jump", false);
player_run.init("C:\\Users\\lin13\\Desktop\\game2\\resources\\audio\\player_run.mp3", "player_run", false);
BGM.play();
while (true) {
DWORD frame_start_time = GetTickCount();
cleardevice();
putimage(-cam.get_position().x, -cam.get_position().y, &background);
textbox1.draw();
esc_button.draw();
int delta = 1000/144;
input.update();
//处理输入
if (!jumping && input.isKeyDown(VK_SPACE)) {
jumping = true;
vy = jumpSpeed;
player.Play(facingLeft ? "Jump_flip" : "Jump", false);
player_jump.play();
}
// 每帧模拟重力
if (jumping) {
vy += gravity;
player.Move(0, vy);
if (vy < 100) {
std::cout << "jumping: " << jumping << std::endl;
std::cout << "vy: " << vy << std::endl;
}
// 落地检测
//if (player.position.y >= groundY) {
//player.position.y = groundY;
//vy = 0;
//jumping = false;
//player.play(facingLeft ? "Idle_flip" : "Idle", true);
//}
}
float dx = 0, dy = 0;
if (input.isKeyDown('A')) {
dx -= 1;
facingLeft = true;
//player.switchFacingDuringPlay(true);
patman.SwitchFacingDuringPlay(true);
player_run.play();
}
if (input.isKeyDown('D')) {
facingLeft = false;
dx += 1;
//player.switchFacingDuringPlay(false);
patman.SwitchFacingDuringPlay(false);
player_run.play();
}
if (input.isKeyDown('R')) {
std::cout << "click R" << std::endl;
player.Play("Jump", 50000,0);
}
if (!jumping) {
if (input.isKeyDown('W')) dy -= 1;
if (input.isKeyDown('S')) dy += 1;
}
if (dx != 0 || dy != 0) {
float length = sqrt(dx * dx + dy * dy);
dx /= length;
dy /= length;
//player.move(dx * 6, dy * 6);
patman.Move(dx * 3, dy * 3);
//cam.ChangePos(dx * 6, dy * 6);
if (!jumping)
{
player.Play(facingLeft ? "Run_flip" : "Run", true);
}
}
else
{
player.Play(facingLeft ? "Idle_flip" : "Idle", true);
}
player.UpdatePos(dx, dy,jumping);
//player.UpdateAnim( dx, dy, facingLeft, jumping);
if (jumping) {
// 落地检测
if (player.position.y >= groundY) {
player.position.y = groundY;
vy = 0;
jumping = false;
//player.play(facingLeft ? "Idle_flip" : "Idle", true);
}
}
// 更新精灵动画
player.Update(delta);
player.Draw(cam);
patman.Update(delta);
patman.Draw(cam);
FlushBatchDraw();
// 延迟以控制帧率
DWORD frame_end_time = GetTickCount();
if(frame_end_time-frame_start_time<1000/144)
Sleep(delta-(frame_end_time-frame_start_time));
}
// 关闭图形窗口
closegraph();
return 0;
}
帮我看一下为什么我用资源管理器加载按下A会出问题,而用直接的路径加载就没事
最新发布